哪些控件触发了Page.IsValid = false?

两件事情:

  1. 是否可以通过Jquery设置Page.IsValid(Is_Valid)属性,以便我不必使用aspxvalidation器? 我的理解是IsValid属性是只读的?

  2. 当validation器进入时,是否可以通过Jquery(ofcourse)找出哪些控件导致validation失败? 一个示例是一个包含大量文本框的表单:用户单击该按钮,我将结果显示在validation摘要中。 一切都很好,花花公子。 但我也希望通过更改相应的文本框背景让用户知道它们是哪些控件,例如红色。

现在黑客就是我调用自己的JS函数来检查所有文本框以进行validation(再次),然后将css更改为无效的以显示红色。 但我认为肯定必须有一种方法来识别哪些控件未通过validation?

任何见解?

(A)是不可能的。 Page.IsValid由服务器端validation设置,客户端不应该乱用它。 如果客户端validation失败,则不会回发,因此在这种情况下甚至不会调用Page.Validate()

AJAX Control Toolkit通过重新绑定validation函数来实现(B) 。 您可以尝试以下内容:

[免责声明:我还不熟悉jQuery,所以我会使用普通的JS。 随意翻译成适当的jQuery惯用语。]

 for (var i = 0; i < window.Page_Validators.length; ++i) { var validator = window.Page_Validators[i]; validator.__old_evaluationfunction = validator.evaluationfunction; validator.evaluationfunction = function(value) { var element = validator.controltovalidate; if (!validator.__old_evaluationfunction(value)) { // Validation failed - turn `element` red, scream at the user, etc. return false; } else { // Validation succeeded - restore `element` to its normal state. return true; } }; } 

所有validation控件都可以进行服务器validation。 从客户端覆盖isvalid = false只能阻止回发发生。 在服务器端和客户端,您可以枚举validation器的集合,每个ctrl都具有IsValid属性。