ASP.NET验证具有不同验证组的所有验证器

时间:2010-10-13 14:18:52

标签: asp.net validation validationsummary client-side-validation validation-controls

我正在编写一个ASP.NET页面并试图让验证工作。我的问题是我有一个包含多个自定义网格控件的转发器,每个控件都有验证器和验证摘要。

起初,我没有分配任何验证组,但是这最终会在每个网格中出现错误时为每个网格显示验证摘要(因为验证摘要的验证组未设置,我想,这意味着它捕获所有验证错误)。

所以我为每个网格分配了一个单独的验证组,对于控件上的某个属性是唯一的。但是我在页面底部有一个按钮(没有验证组)需要验证输入。没有验证组,它不会自动验证网格的验证器,因此我添加了一个调用Page_ClientValidate()的单击处理程序。没有骰子 - 验证随处可见。

好的,所以如果它有任何验证器,我会遍历验证组并在每个验证组上调用Page_ClientValidate(validationGroup)。当只有一个网格有验证器时工作正常,但当两个或多个网格有验证器时,它会自动隐藏所有验证摘要但检查最后一个。有没有办法禁用这种行为,或者更好的方法完全这样做?

如果我需要,我想我可以通过迭代验证完成后取消隐藏其他验证摘要(尽管可能还有其他含义),但我还需要取消隐藏验证器显示(我正在使用图像来表示无效字段)。这似乎是一个令人烦恼且可能很脆弱的解决方案。

编辑:哦,扭曲。我尝试了最后提到的方法 - 重新显示无效的隐藏验证器/验证摘要 - 但Microsoft代码也阻止了这一点;在ValidatorValidate(validator, validationGroup, event)方法的第一行(由Page_ClientValidate(validationGroup)在页面中的每个验证程序上调用)中,validator.isvalid设置为true,并且仅设置为返回值条件中的验证函数,仅在validationGroup参数与验证器匹配时才运行。结果是,隐藏的验证器都标记为有效,因此很难确定验证器是否有效,因为它实际上是有效的,或者因为Microsoft在设计客户端验证代码时很愚蠢。

0 个答案:

没有答案