验证摘要和AJAX请求

时间:2013-03-03 12:44:43

标签: asp.net-mvc jquery-validate unobtrusive-validation

我正在编写一个jQuery插件,允许我们轻松“hijax”标准HTML表单,通过AJAX而不是标准POST提交。

插件需要处理的一件事是验证错误,而在ASP.NET MVC的情况下,服务器上的ModelState错误。

我编写了一个拦截AJAX请求的Action Filter,并将Modelstate错误作为JSON返回。这适用于字段错误(即在表单上有输入的错误)​​:

$.ajax({
    url: this.action,
    type: "POST",
    data: $(this).serialize(),
    statusCode: {
        400: function (xhr, textStatus, errorThrown) {
            var errors = $.parseJSON(xhr.responseText);
            validator.showErrors(errors);
        }
    },
    success: function (response) {
        window.location.href = "/login/success";
    }
});

jQuery Validate showErrors函数查找与错误键匹配的name的输入元素。

由于ASP.NET MVC中的标准约定是在您要提供“摘要”错误时执行以下操作:

ModelState.AddModelError("", "Error without a key");  

这会导致jQuery validate抛出异常。

到目前为止,我提出的最佳解决方案是在表单上创建一个隐藏的输入:

<input type="hidden" name="summary" disabled/> <!-- prevent it from being submitted -->
@Html.ValidationMessage("summary")    

然后在我想显示“摘要”错误时在服务器上执行以下操作:

ModelState.AddModelError("summary", "Summary error");  

这并不理想,因为它不适用于多个错误。一个更好的解决方案是勾引不显眼的验证插件如何处理摘要错误,但我看不出如何做到这一点。

0 个答案:

没有答案