我认为 RequiredFieldValidators、CustomValidators 和所有其他验证器都将存在于 Controls 集合中。基本上我有一个用户控件,里面有许多验证器,我想掌握它们来做事。
Page.Validators 似乎返回了一个 IValidator 对象列表,这不是我想要的。
我在哪里可以获得用户控件中所有验证器的列表?
我认为 RequiredFieldValidators、CustomValidators 和所有其他验证器都将存在于 Controls 集合中。基本上我有一个用户控件,里面有许多验证器,我想掌握它们来做事。
Page.Validators 似乎返回了一个 IValidator 对象列表,这不是我想要的。
我在哪里可以获得用户控件中所有验证器的列表?
Page.Validators 集合是您最好的选择;所有的验证器都实现了 IValidator,然后是 BaseValidator,所以你可以用这个来做。由于验证器是一个控件,它的父引用跟踪将包含对它所在的用户控件的引用。它可能需要您执行以下操作:
if (validator.Parent.Parent.Parent.Parent is UserControl) { }
但这是弄清楚这一点的唯一方法。因此,Page.Validators 的组合和检查父控件树是唯一的方法,除非您寻找验证器实现的特定验证组,这也是另一种方式(BaseValidator 的属性,所以你必须做一个类型检查和强制转换。
最后一个潜在的选择;您可以覆盖在每个控件添加时执行的 AdditionalControl,并检查控件是否是验证器,然后将该控件保存在本地集合中,例如:
private List<BaseValidator> _vals = ..;
protected overrides void AddedControl(Control control, int index) {
if (control is BaseValidator)
_vals.Add((BaseValidator)control);
}
然后您就会知道哪些控件属于该用户控件。我已经使用自定义控件完成了此操作,而不是任何用户控件,因此可能无法像我提到的那样工作......
由于您使用的是 ASP.NET 验证控件,因此您可能正在寻找验证摘要:
你可以用它来适应大多数使用场景,这是一个简单的例子:
http://asp-net-example.blogspot.com/2008/10/validationssummary-example-how-to-use.html
或者,Page.Validators 将提供直接访问。