43

I have this control

<asp:Label ID="lblName" runat="server" Text="My Name" CssClass="required regular" />

I want to remove the required class from code behind, how can I do that?

8 Answers 8

73

You can replace "required" with an empty string:

lblName.CssClass = lblName.CssClass.Replace("required", "");
Sign up to request clarification or add additional context in comments.

2 Comments

Simple, and likely error prone. Say you have a CSS class list like "dialog authentication-dialog modal" and you remove the "dialog" class. Using the code from this answer you end up with " authentication- modal".
You can still do a replace, but use regex to exclude the hyphen error case. You can't use the \b word boundary metacharacter, since this will match "-" as a boundary. Instead use something like lblName.CssClass = Regex.Replace(lblName.CssClass, @"(?<![\w-])dialog(?![\w-])", "");which uses look behind and look ahead to match word boundaries excluding hyphens
15

Just a slightly more generic way of doing the same - should rule out potential errors where a css class might occur elsewhere in the CssClass property.

public void RemoveCssClass(WebControl controlInstance, String css)
{
    controlInstance.CssClass = String.Join(" ", controlInstance.CssClass.Split(' ').Where(x => x != css).ToArray());
}

2 Comments

I prefer this method because it is more like MVC style when you write it into an extension class (providing add and remove CSS class methods on all WebControls).
Thanks |I used it and made extension class as below: public static class WebControlExtension { public static void RemoveCssClass(this WebControl controlInstance, String css) { controlInstance.CssClass = String.Join(" ", controlInstance.CssClass.Split(' ').Where(x => x != css).ToArray()); } public static void AddCssClass(this WebControl controlInstance, String css) { controlInstance.CssClass = String.Join($" {css} ", controlInstance.CssClass.Split(' ').ToArray()); } }
1

Use this:

object.CssClass= object.CssClass.Replace("MyClass", "");

Comments

1

This worked for me

lblName.CssClass = "regular";

1 Comment

This changes the entire list of the CssClass property to just regular. It does not "remove" a particular CSS class, per se. It will not work for most people who need to simply remove a single, specific class from a CssClass list.
1

Here is my code inspired by @KevD's code sample.

   public static void RemoveCssClass(this HtmlGenericControl controlInstance, string css)
    {
        var strCssClass = controlInstance.Attributes["class"];
        controlInstance.Attributes["class"] = string.Join(" ", strCssClass.Split(' ').Where(x => x != css).ToArray().Distinct());
    }

    public static void AddCssClass(this HtmlGenericControl controlInstance, string css)
    {
        var strCssClass = controlInstance.Attributes["class"];
        var cssList = strCssClass.Split(' ').ToArray().Distinct();
       cssList= cssList.Append(css);
        controlInstance.Attributes["class"] = string.Join(" ", cssList);
    }

    /// <summary>
    /// Add or remove specific css class
    /// </summary>
    /// <param name="controlInstance">Control to which css is to be added or remove</param>
    /// <param name="css">            Css class name to be added</param>
    /// <param name="bAddClass">      True to Add / false to remove</param>
    public static void AddOrRemoveCssClass(this HtmlGenericControl controlInstance, string css, bool bAddClass)
    {
        if (bAddClass)
        {
            controlInstance.AddCssClass(css);
        }
        else
        {
            controlInstance.RemoveCssClass(css);
        }
    }

    public static void RemoveCssClass(this WebControl controlInstance, string css)
    {
        controlInstance.CssClass = string.Join(" ", controlInstance.CssClass.Split(' ').Where(x => x != css).ToArray().Distinct());
    }

    public static void AddCssClass(this WebControl controlInstance, string css)
    {
        var cssList = controlInstance.CssClass.Split(' ').ToArray().Distinct();
      cssList=  cssList.Append(css);
        controlInstance.CssClass = string.Join(" ", cssList);
    }

    /// <summary>
    /// Add or remove specific css class
    /// </summary>
    /// <param name="controlInstance">Control to which css is to be added or remove</param>
    /// <param name="css">            Css class name to be added</param>
    /// <param name="bAddClass">      True to Add / false to remove</param>
    public static void AddOrRemoveCssClass(this WebControl controlInstance, string css, bool bAddClass)
    {
        if (bAddClass)
        {
            controlInstance.AddCssClass(css);
        }
        else
        {
            controlInstance.RemoveCssClass(css);
        }
    }

Comments

0

NOTE: whether you add or replace a css class in codeBehind, remember to include equivalent attributes in both classes i.e. both having background-color, font-family...etc. because otherwise you may be fooled to think that the class never switched even though it did but didn't update the equivalent attributes.

1 Comment

This is a comment at best, as it's just a warning about the practice. It doesn't actually address the question at all.
0
lblName.Attributes.Add("class","urclassname"); //add class to lblName

3 Comments

While this does add the class... it doesn't have a nice "remove" approach like jQuery does... so I'd prefer the CssClass approach like KevD or Jorge outlined.
Please explain what you did editing your answer, avoid only code answer
This does the opposite of what the question asks.
0

To remove css Class from Code Behind

lblName.Attributes["class"] = lblName.Attributes["class"].Replace("required", "");;

1 Comment

This empties the Class attribute completely. It doesn't remove a specific CSS class from a list of multiple classes.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.