当前位置:  开发笔记 > 编程语言 > 正文

从代码中更改CSS类

如何解决《从代码中更改CSS类》经验,为你挑选了2个好方法。

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

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

.CssClass += " ReadOnlyStyle";

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

最好的方法是什么?



1> John_..:

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

static class WebControlsExtensions
    {
        public static void AddCssClass(this WebControl control, string cssClass)
        {
            List 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 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 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();
        }
    }


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

2> AnthonyWJone..:

在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, "");
     }
 }

用法:-

ctl.AddCssClass("ReadOnly");
ctl.RemoveCssClass("ReadOnly");

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

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

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有