2

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

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

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

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

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

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

4

0 回答 0