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从控制器返回

{" success":false," ponsponseText":"该电子邮件已经在使用。"}

但是,验证器未接收字符串,因此仍在反馈中显示绿色复选标记,在帮助块中没有消息。我尝试使用"数据记录",但是我无法获得ASP.NET来正确返回状态代码以及消息正确。它覆盖了我发送回的任何自定义消息,验证器无法收到它。

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

ajax是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,请记住相应地更改它。

最新更新