2012-05-15 47 views
4

删除特定的类名在C#ASP.NET我加入一个类来使用<input>编程方式从HTML元素

myInput.Attributes.Add("class","myClass"); 

在某些时候,我想删除添加的类(并非所有的类)。有沿线的等价物:

myInput.Attributes.Remove("class","myClass"); 

.Remove()似乎只能接受一个键盘(无对的值)。谢谢!

+2

你什么时候需要删除CSS类?如果''元素没有'runat =“server”',那么您从代码隐藏中添加的任何属性都不会在回发之间持续存在,无论如何。 –

+0

好的电话,我甚至懒得去想这件事。感谢您帮助我意识到我不必担心删除它! – Jesse

回答

10

没有内置管理属性中的多个值。

您将不得不解析列表,删除类名并更新属性。

喜欢的东西(未经测试):

var classes = myInput.Attributes["class"].Split(' '); 

var updated = classes.Where(x => x != "classtoremove").ToArray(); 

myInput.Attributes["class"] = string.Join(" ", updated); 
+0

感谢您的回复!我明白你要做什么,但是这似乎并不合法。如果您不介意更正语法(或帮助我了解如何实现该语法),我会将其标记为正确。它比我如何实现在数组中循环更有效率。 – Jesse

+0

@Jesse - 如果你有'使用System.Linq;'语句''Where''很好。 – Oded

+0

我似乎只能在List中使用'Where'而不是'Array'。 – Jesse

2

我被Odeds后的启发,创造了为你精心这两种扩展方法;

public static void AddCssClass(this WebControl control, params string[] args) 
{ 
    List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList<string>(); 
    List<string> classesToAdd = args.Where(x => !classes.Contains(x)).ToList<string>(); 
    classes.AddRange(classesToAdd); 
    control.CssClass = String.Join(" ", classes); 
} 
public static void RemoveCssClass(this WebControl control, params string[] args) 
{ 
    List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList<string>(); 
    classes = classes.Where(x => !args.Contains(x)).ToList<string>(); 
    control.CssClass = String.Join(" ", classes); 
} 

的方法是简单地用于从WebControls添加或删除CSS类(从那里Button S,Label S,Panel小号等所有继承)等myButton.AddCssClass("class1", "class2");myButton.RemoveCssClass("class2");

这可能是一个很大的开销,但管理CssClass属性也可能有点麻烦,因为你必须自己处理空白。

例如,您没有看到过这样的多少次?

string myCssClass = "class1"; 
myButton.CssClass += " " + myCssClass; 

请随时改进方法! :)

相关问题