在.net验证程序失败后调用javascript

时间:2010-09-16 04:03:44

标签: .net javascript validation

验证控件验证失败后是否可以调用javascript函数?

2 个答案:

答案 0 :(得分:2)

从MSDN检查文章“ASP.NET Validation in Depth” - 特别感兴趣的部分是提供客户端API的Client Side Validation。您可以使用验证器对象的isvalid属性来确定它是否有效。可以使用服务器端验证器控件的ClientID属性引用Validator对象(在客户端)。

实现目标的方法之一可以是

  1. 通过将js变量Page_ValidationActive设置为false
  2. 来关闭ASP.NET验证
  3. 当回发发生时,使用Page_Validators属性通过所有验证器进行迭代,并验证每次调用ValidatorValidate
  4. 如果感兴趣的验证器无效,请致电您的功能。

答案 1 :(得分:2)

有一种无证的方式。这取决于Microsoft不会更改用于客户端验证的javascript方法的名称,但幸运的是它会优雅地降级,这意味着如果Microsoft更改某些内容,它不会导致您的网站崩溃。

您需要存储指向原始函数的指针,然后覆盖Microsoft正在调用的函数。

var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
ValidatorUpdateIsValid = function() {
    pointerToMicrosoftValidator();
    // do something after Microsoft finishes 
}

由于您只想做验证失败的事情,您应该在通话结束后检查页面是否有效:

var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
ValidatorUpdateIsValid = function() {
    pointerToMicrosoftValidator();
    if (Page_IsValid) {
        alert("Passed Validation");
    } else {
        alert("Failed Validation");
    }
    // do something after Microsoft finishes 
}

我发现测试验证器正在我认为的页面上使用是很重要的,以防我的团队中有人在不删除我的javascript的情况下删除了验证器。所以我添加了一张支票:

if (window.ValidatorUpdateIsValid) {
    alert("page with validator");
}

最后,我想确保我的功能是在Microsoft创建代码后创建的,因此我将该定义包含在jquery.ready调用中。然后,我可以在验证后通过替换“alert after”来调用方法。您应该在使用之前删除所有警报。

$(document).ready(function() {
    //intercept microsoftValidator
    if (window.ValidatorUpdateIsValid) {
        alert("page with validator");
        var pointerToMicrosoftValidator = ValidatorUpdateIsValid;
        ValidatorUpdateIsValid = function() {
            alert("before");
            if (window.pointerToMicrosoftValidator) {
                pointerToMicrosoftValidator ();
                if (Page_IsValid) {
                    alert("Passed Validation");
                } else {
                    alert("Failed Validation");
                }
            }
            alert("after");
        }
    }
});