从代码中更改CSS类

nai*_*own 5 css c# asp.net webforms

CssClass在代码隐藏中设置很容易,但是存在覆盖现有类的风险.

我需要设置某些元素,ReadOnly = true;并且我想将样式应用为视觉提示,该项目无法更改......很简单:

.CssClass += " ReadOnlyStyle";
Run Code Online (Sandbox Code Playgroud)

但有时我需要更改相同的元素,ReadOnly = false;这意味着我将需要删除我设置的CSS类,而不删除我可能已分配的任何其他样式.

最好的方法是什么?

Joh*_*hn_ 14

我已经采用了AnthonyWJones原始代码并对其进行了修改,以便无论在什么情况下它都能正常工作:

static class WebControlsExtensions
    {
        public static void AddCssClass(this WebControl control, string cssClass)
        {
            List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();

            classes.Add(cssClass);

            control.CssClass = classes.ToDelimitedString(" ");
        }

        public static void RemoveCssClass(this WebControl control, string cssClass)
        {
            List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();

            classes.Remove(cssClass);

            control.CssClass = classes.ToDelimitedString(" ");
        }
    }

    static class StringExtensions
    {
        public static string ToDelimitedString(this IEnumerable<string> list, string delimiter)
        {
            StringBuilder sb = new StringBuilder();
            foreach (string item in list)
            {
                if (sb.Length > 0)
                    sb.Append(delimiter);

                sb.Append(item);
            }

            return sb.ToString();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 看起来你只想要`string.Join`而不是定义`ToDelimitedString`! (5认同)
  • 通过从split/manipulate/join代码中提取方法并使用`control.Attributes("class")`而不是`control.CssClass`为`this HtmlControl control`创建第二个扩展方法,可以将此功能扩展为泛型添加了runat ="server"的HTML控件也是如此. (2认同)
  • 如果在已经包含该类的字符串上调用`AddCssClass()`,这将向列表添加一个重复的类. (2认同)

Ant*_*nes 8

在C#3中,您可以添加一些扩展方法.

 static class WebControlsExtensions
 {
     public static void AddCssClass (this WebControl control, string cssClass)
     {
         control.CssClass += " " + cssClass;
     }
     public static void RemoveCssClass (this WebControl control, string cssClass)
     {
         control.CssClass = control.CssClass.replace(" " + cssClass, "");
     }
 }
Run Code Online (Sandbox Code Playgroud)

用法:-

ctl.AddCssClass("ReadOnly");
ctl.RemoveCssClass("ReadOnly");
Run Code Online (Sandbox Code Playgroud)

请注意,RemoveCssClass旨在仅删除AddCssClass添加的那些类,并且具有添加2个附加类名的限制,最短名称不应与最长名称的开头完全匹配.例如,如果添加了"test"和"test2",则无法在不破坏CssClass的情况下删除测试.这可以通过RegEx得到改善,我希望上述内容足以满足您的需求.

请注意,如果您没有C#3,this则从第一个参数中删除关键字,并以常规方式使用静态方法.