3

我认为 RequiredFieldValidators、CustomValidators 和所有其他验证器都将存在于 Controls 集合中。基本上我有一个用户控件,里面有许多验证器,我想掌握它们来做事。

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

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

4

2 回答 2

2

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);
}

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

于 2013-04-19T16:53:02.840 回答
0

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

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

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

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

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

于 2013-04-19T17:22:41.617 回答