我需要将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)总是为空。
有更好的方法吗?
答案 0 :(得分:1)
Page.FindControl
不是递归的,它只搜索控件集合中的内容。它正在变为null,因为您正在搜索的控件嵌套在UserControl中。
您可以看到recursive FindControl function here的版本。