Asp.net 以编程方式添加其他Css类

Asp.net 以编程方式添加其他Css类,asp.net,css,code-behind,Asp.net,Css,Code Behind,我有一个文本框,其中包含一个名为“required”的Css类。当用户单击一个按钮时,我想在名为“error”的文本框中添加额外的Css类,而不删除“required”类。我想从代码隐藏中完成此操作。您可以设置ASP.NET Textbox控件的CssClass属性。要为一个元素添加多个CSS类,只需用空格分隔它: MyTextBox.CssClass = "class1 class2"; 您可以将其放入OnClick事件处理程序中: <asp:TextBox ID="MyTextBox

我有一个文本框,其中包含一个名为“required”的Css类。当用户单击一个按钮时,我想在名为“error”的文本框中添加额外的Css类,而不删除“required”类。我想从代码隐藏中完成此操作。

您可以设置ASP.NET Textbox控件的CssClass属性。要为一个元素添加多个CSS类,只需用空格分隔它:

MyTextBox.CssClass = "class1 class2";
您可以将其放入OnClick事件处理程序中:

<asp:TextBox ID="MyTextBox" runat="server" OnClick="MyTextBox_Click" />

下面是一种使用函数删除css类的方法。添加一个类将非常类似

public void RemoveCssClass(string className)
{
    string[] splitClasses = TextButton.CssClass.Split(' ');
    string separator = "";

    foreach (string _class in splitClasses)
    {
        if (_class != className)
        {
            TextButton.CssClass += separator + _class;
            separator = " ";
        }
    }

    if (TextButton.CssClass == className)
        TextButton.CssClass = "";
}

我决定为WebControl创建扩展方法,以获得通用解决方案。 这是我的密码:

public static class WebControlExtensions
{
    public static void AddCssClass(this WebControl control, string cssClass)
    {
        if (string.IsNullOrEmpty(control.CssClass))
        {
            control.CssClass = cssClass;
        }
        else
        {
            string[] cssClasses = control.CssClass.Split(' ');
            bool classExists = cssClasses.Any(@class => @class == cssClass);

            if (!classExists)
            {
                control.CssClass += " " + cssClass;
            }
        }
    }

    public static void RemoveCssClass(this WebControl control, string cssClass)
    {
        if (!string.IsNullOrEmpty(control.CssClass))
        {
            string[] cssClasses = control.CssClass.Split(' ');
            control.CssClass = string.Join(" ", cssClasses.Where(@class => @class != cssClass).ToArray());
        }
    }
}
这里有一个简单的C#方法,可以在网络控件中添加或删除CssClass

    public static void SetOrRemoveCssClass( WebControl control, string className, bool adding )
    {
        string[] splitClasses = control.CssClass.Split(' ');

        bool hasNow = splitClasses.Contains( className );
        if ( adding && !hasNow )
        {
            control.CssClass += " " + className;
        }
        else if ( !adding && hasNow )   // remove the CssClass attribute
        {
            control.CssClass = control.CssClass.Replace( className, "");
        }
        control.CssClass = control.CssClass.Replace("  "," ").Trim();
    }

使用客户端代码会更容易。想要在代码隐藏中这样做有什么具体的原因吗?从开发的角度来看,代码隐藏并没有那么困难。但是你说得对,在客户端很简单,不需要往返服务器。@Ken他想在单击后执行此操作。此操作的目的是服务器端验证,它可以清除大量内容。最好的方法是在提交时验证整个表单。顺便说一下,你们应该在服务器端和客户端进行验证。哈,我不知道你们可以这么做。如果我想删除第二个css类呢?MyTextBox.CssClass=“class1”;??好吧,但是如果我不知道另一个CssClass是什么呢。我将完成编码并将后端交给设计师。。那样的话,我就知道CssClass的名字了。我不喜欢这样工作,因为它是硬编码的。我不能做textbox.cssclas+=“class2”;是的,只需将属性设置为单个类。实际上,您只是为控件的class属性中显示的内容设置了一个字符串值。如果执行
textbox.CssClass+=“class2”
,则class属性中会出现
class2
。如果您想让它更干净,我会编写一个AddClass方法和一个RemoveClass方法。可能是WebControl类的扩展方法。这是非常糟糕的代码。比如var lsc=splitClasses.ToList()怎么样;lsc.Remove(类名);TextButton.CssCLass=String.Join(“,lsc);
    public static void SetOrRemoveCssClass( WebControl control, string className, bool adding )
    {
        string[] splitClasses = control.CssClass.Split(' ');

        bool hasNow = splitClasses.Contains( className );
        if ( adding && !hasNow )
        {
            control.CssClass += " " + className;
        }
        else if ( !adding && hasNow )   // remove the CssClass attribute
        {
            control.CssClass = control.CssClass.Replace( className, "");
        }
        control.CssClass = control.CssClass.Replace("  "," ").Trim();
    }