【发布时间】:2011-04-13 00:34:35
【问题描述】:
验证控件验证失败后是否可以调用 javascript 函数?
【问题讨论】:
标签: .net javascript validation
验证控件验证失败后是否可以调用 javascript 函数?
【问题讨论】:
标签: .net javascript validation
查看来自 MSDN 的文章“ASP.NET Validation in Depth” - 特别感兴趣的部分是提供客户端 API 的 Client Side Validation。您可以使用验证器对象的 isvalid 属性来确定其是否有效。验证器对象(在客户端)可以使用服务器端验证器控件的 ClientID 属性来引用。
实现你想要的方法之一可以是
Page_ValidationActive 设置为 false 来关闭 ASP.NET 验证Page_Validators 属性遍历所有验证器并验证每个调用 ValidatorValidate。【讨论】:
有一种未记录的方式。这取决于 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");
}
}
});
【讨论】:
Page_ClientValidate 函数之后:stackoverflow.com/a/7692484/1813219 而不是ValidatorUpdateIsValid 它就像一个魅力。