如何动态设置ValidationGroup

时间:2008-09-26 09:48:38

标签: asp.net validation validationsummary

我有一个带有2个UserControls(.ascx)的ASP.NET 2.0网页。每个UserControl都包含一堆验证器。在页面上放置ValidationSummary将显示UserControl的所有验证错误。在每个UserControl中放置ValidationSummary将两次显示两个控件的所有错误。

我想要的是每个UserControl的ValidationSummary,仅显示该UserControl上的错误。

我试图通过动态地在每个usercontrol上设置验证器的ValidationGroup属性来解决这个问题。这样每个validationsummary都应该只显示其UserControl的错误。我用过这段代码:

foreach (Control ctrl in this.Controls)
{
    if (ctrl is BaseValidator)
    {
        (ctrl as BaseValidator).ValidationGroup = this.ClientID;
    }
}
ValidationSummary1.ValidationGroup = this.ClientID;

然而,这似乎禁用了客户端和服务器端验证,因为在提交表单时没有进行验证。

帮助?

2 个答案:

答案 0 :(得分:4)

导致表单提交的控件(即Button控件)必须是与任何ValidationSummary和* Validator控件相同的验证组的一部分。

答案 1 :(得分:2)

如果使用ValidationGroups,则只有在导致回发的控件被分配给同一ValidationGroup时才会进行验证。

如果您想使用单个控件进行回发,您仍然可以执行此操作,但您需要显式调用Page.Validate方法。

Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
    //do stuff
}

建议: 为什么不在名为ValidationGroup的用户控件上公开公共属性? 在setter中,您可以为每个验证器显式设置验证组。您也可以使用循环,但显式设置每个验证器会更有效。这可能会提高使用用户控件的代码的可读性。

相关问题