在Asp.Net中,我该如何确定哪个验证控件将Page.IsValid设置为false?

4

我有一个非常大的表单,有很多RequiredFieldValidator,我如何以编程方式确定哪个控件将IsValid属性设置为false

2个回答

16

在服务器端,您可以查看Validators属性以查找所有的IValidator实例。然后,您只需测试哪个(些)不是.IsValid即可。

var notValidValidators = Page.Validators.Cast<IValidator>().Where(v => !v.IsValid);

在客户端,情况类似。有一个JavaScript数组Page_Validators,每个元素都有一个isvalid属性。

var notValidValidators = Page_Validators.filter(function(v) { return !v.isvalid; });

看起来很有前途,但是出现了错误17:'System.Web.UI.ValidatorCollection'不包含“Where”的定义,也没有接受类型为'System.Web.UI.ValidatorCollection'的第一个参数的扩展方法'Where'(您是否缺少使用指令或程序集引用?) - travis
2
LINQ扩展方法在IEnumerable上哪里。确保您有“using System.Linq;”。如果ValidatorCollection不支持IEnumerable<T>,则可以执行类似于Page.Validators.Cast<IValidator>().Where(...)的操作。 - Mark Brackett
Page.Validators.Cast<IValidator>().Where(v => !v.IsValid) 看起来编译通过,谢谢! - travis

2

您可以检查各个验证器的.IsValid属性。

如果是RequiredFieldValidator,那么如果控件无效,用户本来就不能回传。您想要做什么?


它们都有 EnableClientScript="false",并且还有一堆以编程方式添加的内容。我有一个表单实例不是有效的,但没有指定错误,我正在尝试找出哪个验证器正在触发,以便我可以添加更明确的消息。 - travis
当然。您可以选择Mark的LINQ解决方案,因为似乎它是最高效的。我自己对LINQ不太熟悉。 - Nick Rolando

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接