我正在编写一个ASP.NET页面并试图让验证工作。我的问题是我有一个包含多个自定义网格控件的转发器,每个控件都有验证器和验证摘要。
起初,我没有分配任何验证组,但是这最终会在每个网格中出现错误时为每个网格显示验证摘要(因为验证摘要的验证组未设置,我想,这意味着它捕获所有验证错误)。
所以我为每个网格分配了一个单独的验证组,对于控件上的某个属性是唯一的。但是我在页面底部有一个按钮(没有验证组)需要验证输入。没有验证组,它不会自动验证网格的验证器,因此我添加了一个调用Page_ClientValidate()
的单击处理程序。没有骰子 - 验证随处可见。
好的,所以如果它有任何验证器,我会遍历验证组并在每个验证组上调用Page_ClientValidate(validationGroup)
。当只有一个网格有验证器时工作正常,但当两个或多个网格有验证器时,它会自动隐藏所有验证摘要但检查最后一个。有没有办法禁用这种行为,或者更好的方法完全这样做?
如果我需要,我想我可以通过迭代验证完成后取消隐藏其他验证摘要(尽管可能还有其他含义),但我还需要取消隐藏验证器显示(我正在使用图像来表示无效字段)。这似乎是一个令人烦恼且可能很脆弱的解决方案。
ValidatorValidate(validator, validationGroup, event)
方法的第一行(由Page_ClientValidate(validationGroup)
在页面中的每个验证程序上调用)中,validator.isvalid
设置为true
,并且仅设置为返回值条件中的验证函数,仅在validationGroup
参数与验证器匹配时才运行。结果是,隐藏的验证器都标记为有效,因此很难确定验证器是否有效,因为它实际上是有效的,或者因为Microsoft在设计客户端验证代码时很愚蠢。