如何获取页面中的所有验证器?

时间:2013-04-19 16:45:57

标签: asp.net

我认为RequiredFieldValidators,CustomValidators和所有其他验证器都会存在于Controls集合中。基本上我有一个用户控件,其中有许多验证器,我想得到它们来处理它们。

Page.Validators似乎返回了一个IValidator对象列表,这不是我想要的。

在哪里可以获取用户控件中所有验证器的列表?

2 个答案:

答案 0 :(得分:2)

Page.Validators系列是您最好的选择;所有验证器都实现了IValidator,反过来又实现了BaseValidator,所以你可以使用它来做到这一点。由于验证器是一个控件,它的父引用跟踪将包含对它所在的用户控件的引用。它可能需要你执行以下操作:

if (validator.Parent.Parent.Parent.Parent is UserControl) { }

但这是解决问题的唯一方法。所以Page.Validators的组合,以及检查父控件树是唯一的方法,除非你寻找验证器实现的特定验证组,这也是另一种方式(BaseValidator的属性,所以你必须做一个类型检查和演员。

最后一个可能的选择;你可以覆盖在每个控件添加上执行的AddedControl,并检查控件是否是验证器,然后将该控件保存在本地集合中,如:

private List<BaseValidator> _vals = ..;

protected overrides void AddedControl(Control control, int index) {
   if (control is BaseValidator)
     _vals.Add((BaseValidator)control);
}

然后您将知道哪些控件属于该用户控件。我已经使用自定义控件完成了这项操作,而不是任何带有用户控件的操作,因此可能无法完全按照我提到的那样工作...

答案 1 :(得分:0)

由于您正在使用ASP.NET验证控件,因此您可能正在寻找验证摘要:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.validationsummary%28v=vs.100%29.aspx

你可以用它来适应大多数使用场景,这里有一个简单的例子:

http://asp-net-example.blogspot.com/2008/10/validationsummary-example-how-to-use.html

或者,Page.Validators将提供直接访问。