我认为RequiredFieldValidators,CustomValidators和所有其他验证器都会存在于Controls集合中。基本上我有一个用户控件,其中有许多验证器,我想得到它们来处理它们。
Page.Validators似乎返回了一个IValidator对象列表,这不是我想要的。
在哪里可以获取用户控件中所有验证器的列表?
答案 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://asp-net-example.blogspot.com/2008/10/validationsummary-example-how-to-use.html
或者,Page.Validators将提供直接访问。