验证控件验证失败后是否可以调用javascript函数?
答案 0 :(得分:2)
从MSDN检查文章“ASP.NET Validation in Depth” - 特别感兴趣的部分是提供客户端API的Client Side Validation。您可以使用验证器对象的isvalid属性来确定它是否有效。可以使用服务器端验证器控件的ClientID属性引用Validator对象(在客户端)。
实现目标的方法之一可以是
Page_ValidationActive
设置为false Page_Validators
属性通过所有验证器进行迭代,并验证每次调用ValidatorValidate
。答案 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");
}
}
});