如何为所有ASP.Net验证器设置皮肤?

时间:2009-04-02 15:16:22

标签: asp.net themes skin

我希望ASP.Net 3.5网站中的所有验证器都具有CssClass值“error”。我最初的想法是在这样的主题皮肤中这样做:

<asp:CompareValidator runat="server" 
    CssClass="error" />
<asp:CustomValidator runat="server" 
    CssClass="error" />
<asp:RequiredFieldValidator runat="server" 
    CssClass="error" />
<belCommon:ZipCodeValidator runat="server" 
    CssClass="error" />
<belCommon:PhoneNumberValidator runat="server" 
    CssClass="error" />

这只是我使用的验证器的部分列表。理想情况下,我想做这样的事情:

<asp:BaseValidator runat="server" 
    CssClass="error" />

因为所有验证器都继承自BaseValidator,我希望这会起作用,但事实并非如此。有没有办法实现这一点,而不是明确地向皮肤添加每个验证器控件?

更新

我发现了一种使用javascript的不同方法:

Sys.Application.add_init(function(sender, args)
{
    if (Page_Validators != null)
    {
        for (i = 0; i < Page_Validators.length; i++)
        {
            Page_Validators[i].className = "error";
        }
    }
});

ASP.Net生成一个名为Page_Validators的javascript变量,它是验证范围的数组。此脚本检查它是否存在,然后循环并设置类名。我将此添加到母版页及其工作目前。

3 个答案:

答案 0 :(得分:3)

我不知道,在定义皮肤时,您专门使用单个控件,并且无法以任何其他方式指定它,因为它根据使用的标记进行匹配。

从它的外观来看,你也在创建自己的自定义验证器,你可以修改你的控件以获得一个默认的cssclass错误来节省一些时间。

答案 1 :(得分:1)

我很想在服务器页面加载方法中迭代页面控件并在那里应用css类:

foreach (object obj in this.Controls)
{
  if (obj is BaseValidator)
  {
     ((BaseValidator)obj).CssClass = "error";
  }
}

这可能不是最好的方法,我没有机会测试它,但希望它可以帮助你。

答案 2 :(得分:1)

我发现了一种使用javascript的不同方法:

Sys.Application.add_init(function(sender, args)
{
    if (Page_Validators != null)
    {
        for (i = 0; i < Page_Validators.length; i++)
        {
            Page_Validators[i].className = "error";
        }
    }
});

ASP.Net生成一个名为Page_Validators的javascript变量,它是验证范围的数组。此脚本检查它是否存在,然后循环并设置类名。我将此添加到母版页及其工作目前。