2011-06-27 33 views
10

Tôi có một hộp văn bản với một lớp Css được gọi là 'bắt buộc'. Khi người dùng nhấp vào một nút, tôi muốn thêm lớp Css bổ sung vào hộp văn bản được gọi là 'lỗi' mà không xóa lớp 'bắt buộc'. Tôi muốn thực hiện điều này từ code-behind.Thêm lớp Css bổ sung theo chương trình

+0

này sẽ dễ dàng hơn nhiều với mã phía khách hàng. Có một lý do cụ thể để muốn làm điều này trong codebehind? – xanderer

+0

Nó không thực sự khó khăn (từ một quan điểm phát triển) từ mã phía sau. Nhưng bạn đúng về việc dễ dàng ở phía khách hàng và không yêu cầu một chuyến đi khứ hồi tới máy chủ. –

+0

@Khi anh ấy muốn làm điều này onclick. – xanderer

Trả lời

13

Bạn có thể đặt thuộc tính CssClass của điều khiển hộp văn bản ASP.NET. Để thêm nhiều hơn một lớp CSS cho một yếu tố, chỉ cần tách nó với một không gian:

MyTextBox.CssClass = "class1 class2"; 

Bạn có thể đặt điều này trong xử lý sự kiện OnClick của bạn:

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

Sau đó, trong code-behind:

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

hah tôi không biết bạn có thể làm điều đó. Và nếu tôi muốn xóa lớp css thứ hai thì sao? MyTextBox.CssClass = "class1"; ?? – Dragan

+0

okay nhưng nếu tôi không biết CssClass kia là gì. Tôi sẽ được thực hiện với mã hóa và cung cấp cho back-end cho các nhà thiết kế .. trong trường hợp đó tôi sẽ hafta biết tên của CssClass là gì. Tôi không thích làm việc như thế này vì nó được mã hóa cứng. Tôi không thể làm textbox.cssclas + = "class2"; – Dragan

+0

Có, chỉ cần đặt thuộc tính cho lớp duy nhất. Bạn thực sự chỉ cần thiết lập một giá trị chuỗi của những gì sẽ xuất hiện trong thuộc tính lớp cho điều khiển. –

4

Đây là cách để loại bỏ lớp css bằng cách sử dụng một hàm. Thêm một lớp sẽ rất giống nhau.

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

Đó là mã khá xấu. Làm thế nào về một cái gì đó như var lsc = splitClasses.ToList(); lsc.Remove (className); TextButton.CssCLass = String.Join ("", lsc); – NetMage

14

Tôi quyết định tạo các phương pháp mở rộng cho WebControl để có giải pháp chung. Dưới đây là mã của tôi:

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

Dưới đây là một C# phương pháp đơn giản để thêm hoặc xóa một CssClass thành một 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(); 
    } 
Các vấn đề liên quan