提问人:Cato Johnston 提问时间:9/16/2010 最后编辑:LarsHCato Johnston 更新时间:7/11/2011 访问量:2739
在 .net 验证程序失败后调用 javascript
Calling javascript after a .net validator fails
答:
2赞
VinayC
9/16/2010
#1
请查看 MSDN 中的文章“ASP.NET Validation in Depth”,其中特别感兴趣的部分是提供客户端 API 的客户端验证。您可以使用验证器对象的 isvalid 属性来确定其是否有效。可以使用服务器端验证程序控件的 ClientID 属性引用验证程序对象(在客户端)。
实现你想要的方法之一可能是
- 通过将 js 变量设置为 false 来关闭 ASP.NET 验证
Page_ValidationActive
- 当回发发生时,使用 property 遍历所有验证器并验证每个调用。
Page_Validators
ValidatorValidate
- 如果感兴趣的验证器无效,则调用您的函数。
2赞
Jim
6/23/2011
#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");
}
}
});
评论
1赞
Mariusz Ignatowicz
10/14/2016
我尝试过这个解决方案,但它不仅不起作用,而且还禁用了验证。在像他们在这里所做的那样覆盖功能之后:stackoverflow.com/a/7692484/1813219 而不是它像魅力一样工作。Page_ClientValidate
ValidatorUpdateIsValid
0赞
Jim
3/9/2017
伟大!可能是他们改变了我在我们职位之间的 5 年中描述的无证方式。很高兴您找到了一个新的更好的解决方案。
评论