将CSS类应用于Web表单上的无效控件

时间:2010-06-17 21:19:15

标签: asp.net webforms

我需要将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);
                    }
                }
            }
        }
    }

}

问题就是我在.Net用户控件上调用的问题,我想是因为我传入了Page,page.FindControl(bv.ControlToValidate)总是为空。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

Page.FindControl不是递归的,它只搜索控件集合中的内容。它正在变为null,因为您正在搜索的控件嵌套在UserControl中。

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