Asp.net 以编程方式添加其他Css类
我有一个文本框,其中包含一个名为“required”的Css类。当用户单击一个按钮时,我想在名为“error”的文本框中添加额外的Css类,而不删除“required”类。我想从代码隐藏中完成此操作。您可以设置ASP.NET Textbox控件的CssClass属性。要为一个元素添加多个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
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();
}