mvc客户端验证失败了,因为我正在做一个ajax jquery.post

mvc客户端验证失败了,因为我正在做一个ajax jquery.post,jquery,asp.net-mvc,validation,Jquery,Asp.net Mvc,Validation,您好,我正在使用一些ajax和jquery来执行表单的发布 以下是我的jquery: $("#submit").click(function (e) { e.preventDefault(); $.post("Account/LogOn", $(this.form).serialize(), function (data) {

您好,我正在使用一些ajax和jquery来执行表单的发布

以下是我的jquery:

 $("#submit").click(function (e) {
            e.preventDefault();
            $.post("Account/LogOn",
                    $(this.form).serialize(),
                    function (data) {
                        if (data.redirect) {
                            // data.redirect contains the string URL to redirect to
                            window.location.href = data.redirect;
                        }
                        else {
                            // data.form contains the HTML for the replacement form
                            $("#error").replaceWith(data.error);
                        }
                    },
                    'json'
            );
            return false;
        });
这与预期一样有效,但是内置MVC验证不再有效? (如果省略错误消息并提交表单,则错误消息不会显示所需用户名/密码。)

知道客户端验证不再有效的原因吗


谢谢

因为客户端验证是由表单帖子触发的,而您不再发布表单,所以您执行的是jQuery帖子,它基本上绕过了验证触发器。您必须在javascript中手动触发验证,然后检查客户端验证是否发现任何错误,如果没有,则可以继续ajax post

编辑:了解如何做到这一点。代码将类似于此

    $("#submit").click(function (e) {
            e.preventDefault();
            $(this.form).validate();
            if($(this.form).valid())
{
            $.post("Account/LogOn",
                    $(this.form).serialize(),
                    function (data) {
                        if (data.redirect) {
                            // data.redirect contains the string URL to redirect to
                            window.location.href = data.redirect;
                        }
                        else {
                            // data.form contains the HTML for the replacement form
                            $("#error").replaceWith(data.error);
                        }
                    },
                    'json'
            );
            return false;
}
        });

我的第一个猜测是,您正在替换的HTML被替换为无效标记。导致现有JavaScript验证无法工作。我需要更多地了解AJAX请求返回的内容。替换工作正常,如果用户名/密码组合不存在,它会显示一个字符串“提供的用户名或密码不正确”。我在问为什么客户端验证不再有效——它是mvc项目btwDepends附带的基本登录表单,您使用的是哪个验证框架。jquery验证可能如下所示。编辑了我的答案以便澄清。