繁体   English   中英

.net mvc jquery客户端验证问题

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM