2010-06-17 31 views
1

我需要將css類應用於Web窗體上的無效控件。我想讓它成爲一個可重用的課程。這是我到目前爲止有:將CSS類應用於Web窗體上的無效控件

public class Validation 
{ 
    public static void ApplyInvalidClass(Page page, string className) 
    { 
     foreach (System.Web.UI.WebControls.BaseValidator bv in page.Validators) 
     { 
      if (!bv.IsValid) 
      { 
       Control ctrl = page.FindControl(bv.ControlToValidate); 

       if (ctrl != null) 
       { 
        if (ctrl is TextBox) 
        { 
         TextBox txt = ctrl as TextBox; 
         txt.CssClass = "invalid"; 
        } 

        if (ctrl is DropDownList) 
        { 
         DropDownList ddl = ctrl as DropDownList; 
         ddl.CssClass = "invalid"; 
        } 

        if (ctrl is CheckBox) 
        { 
         CheckBox cb = ctrl as CheckBox; 
         cb.CssClass = "invalid"; 
        } 

        if (ctrl is HtmlGenericControl) 
        { 
         HtmlGenericControl html = ctrl as HtmlGenericControl; 
         html.Attributes.Add("class", className); 
        } 
       } 
      } 
     } 
    } 

} 

的問題是什麼,我把這種對淨用戶控件,我猜是因爲我傳遞頁面,page.FindControl(bv.ControlToValidate)總是空。

有沒有更好的方法來做到這一點?

回答

1

Page.FindControl不是遞歸的,它只搜索直接在控件集合中的內容。由於您正在搜索的控件嵌套在UserControl中,因此它將變爲null。

您可以看到recursive FindControl function here的版本。

+0

我認爲正確的行爲需要解決使用validator.NamingContainer.FindControl(...),而不是page.FindControl(...)。在一個頁面中可能有幾個同名的控件。 – sisve 2012-04-01 08:25:37