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

时间:2010-10-13 14:44:33

标签: jquery asp.net validation

两件事:

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

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

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

    有什么见解?

2 个答案:

答案 0 :(得分:3)

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

AJAX Control Toolkit通过重新绑定验证函数来实现(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;
        }
    };
}

答案 1 :(得分:2)

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