2012-05-15 41 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; 

請隨時改進方法! :)

相關問題