1000hz bootstrap验证器自定义

时间:2017-09-16 16:11:01

标签: jquery bootstrapvalidator-1000hz

我遇到了将返回字符串传递回验证器的麻烦。

这是我的js

$('#frmSignUp').validator({
        custom: {
            emailexist: function ($el) {
                var result = checkUserEmail($el.val())
                    .done(function (r) {
                        if (!r.success) {
                            // email already in use
                            return r;
                        } 
                    })
                return result.responseText;
            }
        }
    });

    function checkUserEmail(name) {
        return $.ajax({
            url: '@Url.Action("CheckUserName","Account")',
            data: { ChapterPOCEmail: name },
            type: 'POST',
            dataType: 'json'
        });
    }

在chrome dev工具中" r"确实有从控制器返回的完整json

  

{"成功":false," responseText":"该电子邮件已在使用中。"}

但是,验证器没有接收到字符串,因此仍然在反馈中显示绿色复选标记,并且帮助块中没有消息。我曾尝试使用" data-remote"但我无法让asp.net正确返回状态代码和消息。它覆盖了我发回的任何自定义消息,验证器无法接收它。

对我的问题有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

ajax是异步方法by deafult,不会返回任何值。

您可以强制它同步或使用承诺,并在成功时使用它的价值......

使用此更改您的checkUserEmail

function checkUserEmail(name) {
    var r = false;

    $.ajax({
        url: '@Url.Action("CheckUserName","Account")',
        data: { ChapterPOCEmail: name },
        type: 'POST',
        dataType: 'json',
        async: false // wait for the call, dont treat as an async call
    }).done(function(result) {
        r = result === "OK";
    }).fail(function (err) {
        console.log(err, "something went awire");
    }).always(function () {
        console.log("all done");
    });

    return r;
}

我假设您的ajax调用返回OK,请记得相应地更改它。