2011-06-27 38 views
10

我有一個名爲'required'的Css類的文本框。當用戶點擊一個按鈕時,我想添加額外的Css類到名爲'error'的文本框中,而不刪除'required'類。我想從代碼隱藏中完成此任務。以編程方式添加額外的Css類

+0

這將與客戶端代碼容易得多。是否有一個特定的原因希望在代碼隱藏中做到這一點? – xanderer

+0

從代碼隱藏(從開發的角度來看)並不那麼困難。但是你說得很對,在客戶端很容易,而且不需要往返服務器。 –

+0

@Ken他想要這樣做onclick。 – xanderer

回答

13

您可以設置ASP.NET Textbox控件的CssClass屬性。要添加多個CSS類的元素,只是用空格分隔它:在代碼隱藏

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

然後:

​​

你可以把這個在你的OnClick事件處理程序

void MyTextBox_Click(Object sender, EventArgs e) { 
    MyTextBox.CssClass = "class1 class2"; 
} 
+0

哈哈,我不知道你能做到這一點。而如果我想刪除第二個CSS類呢? MyTextBox.CssClass =「class1」; ?? – Dragan

+0

好吧,但如果我不知道其他CssClass是什麼。我將完成編碼工作,並將設計後端交給設計人員。在這種情況下,我會知道CssClass的名稱是什麼。我不喜歡這樣工作,因爲它是硬編碼的。我不能做textbox.cssclas + =「class2」; – Dragan

+0

是的,只需將屬性設置爲單個類。你真的只是設置控件的class屬性中出現的字符串值。 –

4

這是一種使用函數刪除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 = ""; 
} 
+2

這是很糟糕的代碼。怎麼樣像var lsc = splitClasses.ToList(); lsc.Remove(類名); TextButton.CssCLass = String.Join(「」,lsc); – NetMage

14

我決定爲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()); 
     } 
    } 
} 
0

這裏有一個簡單的C#的方法來添加或刪除的CssClass成的WebControl ...

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(); 
    }