[英].net mvc jquery clientside validation problem
我正在将.net 4与mvc 2和注释一起使用进行验证。 我建立了一个自己的validationAttribute,以检查数据库中是否已存在电子邮件。 C#函数ismailexisting()返回正确的值,但是javascript不能正确执行。 javascript / jquery-part看起来像这样:
Sys.Mvc.ValidatorRegistry.validators["isexisting"] = function (rule) {
return function (value, context) {
$.ajax({
url: "/persons/ismailexisting",
type: "POST",
data: { email: value },
success: function (data) {
//alert("success: " + data);
if (data == "yes") {
return false;
}
}
})
return true;
return rule.ErrorMessage;
};
};
如果电子邮件已经存在,则函数ismailexisting()返回“是”,否则返回“否”。 如果存在电子邮件(因此数据为“是”),则javascript应阻止用户继续,因为他必须输入其他电子邮件。 如果我取消对alert()的注释,则data的值为正确的值。 但是有些东西使javascript无法为我的视图提供正确的结果。
提前致谢!
默认情况下,AJAX调用是异步的,因此您无法从回调中返回该函数的值。 在AJAX调用返回响应之前,该函数已返回值true。 您可以通过在AJAX调用的选项中设置async: false
来解决此问题。 请注意,这还会阻止任何其他JavaScript在等待服务器响应时在页面上运行,因此请谨慎使用。 还要注意,回调中的返回仅从该函数返回,而不从封闭的验证器函数返回。 从外部范围设置捕获的变量的值,然后从验证器返回该变量的值。
Sys.Mvc.ValidatorRegistry.validators["isexisting"] = function (rule) {
return function (value, context) {
var result = true;
$.ajax({
url: "/persons/ismailexisting",
type: "POST",
async: false, // force the call to run synchronously
cache: false, // we probably don't want to use a cached result
data: { email: value },
success: function (data) {
//alert("success: " + data);
if (data == "yes") {
// set captured value for return
result = false;
}
}
})
return result;
//return rule.ErrorMessage; // you'll never reach this...
};
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.