我有一个带有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;
然而,这似乎禁用了客户端和服务器端验证,因为在提交表单时没有进行验证。
帮助?
答案 0 :(得分:4)
导致表单提交的控件(即Button控件)必须是与任何ValidationSummary和* Validator控件相同的验证组的一部分。
答案 1 :(得分:2)
如果使用ValidationGroups,则只有在导致回发的控件被分配给同一ValidationGroup时才会进行验证。
如果您想使用单个控件进行回发,您仍然可以执行此操作,但您需要显式调用Page.Validate方法。
Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
//do stuff
}
建议: 为什么不在名为ValidationGroup的用户控件上公开公共属性? 在setter中,您可以为每个验证器显式设置验证组。您也可以使用循环,但显式设置每个验证器会更有效。这可能会提高使用用户控件的代码的可读性。