如何动态设置ValidationGroup
时间:2020-03-06 14:46:30 来源:igfitidea点击:
我有一个带有2个UserControls(.ascx)的ASP.NET 2.0网页。每个UserControl包含一堆验证器。在页面上放置一个ValidationSummary将显示两个UserControl的所有验证错误。在每个UserControl中放置一个ValidationSummary将两次显示两个控件的所有错误。
我想要的是每个UserControl的ValidationSummary,仅显示该UserControl上的错误。
我试图通过动态设置每个用户控件上验证器的ValidationGroup属性来解决此问题。这样,每个验证摘要都应仅显示其UserControl的错误。我使用了以下代码:
foreach (Control ctrl in this.Controls) { if (ctrl is BaseValidator) { (ctrl as BaseValidator).ValidationGroup = this.ClientID; } } ValidationSummary1.ValidationGroup = this.ClientID;
但是,这似乎禁用了客户端验证和服务器端验证,因为提交表单时不会进行验证。
帮助?
解决方案
导致表单提交的控件(即Button控件)必须与任何ValidationSummary和* Validator控件属于同一验证组。
如果使用ValidationGroups,则只有在将导致回发的控件分配给相同的ValidationGroup时,才进行验证。
如果要使用单个控件进行回发,则仍然可以执行此操作,但是我们需要显式调用Page.Validate方法。
Page.Validate(MyValidationGroup1); Page.Validate(MyValidationGroup2); if(Page.IsValid) { //do stuff }
建议:
我们为什么不在用户控件上公开一个称为ValidationGroup的公共属性?
在设置器中,我们可以为每个验证器显式设置验证组。我们也可以使用循环,但是显式设置每个验证器会更有效。这可以提高使用用户控件的代码的可读性。