我正在尝试捕获jquery validate plugin错误回调。我知道如果我直接调用validate,你可以很容易地加入这个:
$('#form').validate({
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
//etc
}
}
});
但我不是。相反,我的表单将提交给服务器,如果!Model.IsValid
,则服务器返回无效模型并使用错误消息填充占位符:
<span data-valmsg-replace="true" data-valmsg-for="Email" class="field-validation-error">This field is required</span>
我需要知道何时使用错误消息更新此跨度,因为我有以下包装器:
<div class="errorContainer">
@Html.ValidationMessageFor(m => m.Email) /*This is the span above*/
</div>
div.errorContainer { visibility : hidden; }
我需要在有错误信息时才能看到它(因为它有背景但不属于除非内部有错误)。
我该怎么做?最佳解决方案是我可以响应来自BOTH客户端和服务器端验证的错误,因为我计划在确保服务器端被覆盖之后构建客户端验证。我想更好的问题是,有没有办法让服务器返回错误导致invalidHandler
回调?
答案 0 :(得分:0)
我只是想到了这个,还没有测试过,但我认为它会起作用。会报告回来。谢谢巴尼,你的评论给了我一个灯泡。
$.ajax({
url : '/Account/Login',
dataType: $('#form').serialize(),
beforeSend : function(xhr, opts){
... form validation ...
if(formNotValid){
xhr.abort(); /*Abort request*/
/*Display client generated errors*/
}
},
success: function(result){ // return from server is a JsonResult(new { success = true/false, viewResult = this.RenderPartialView("Login", model)})
if(result.success){
//No errors
}
else{
/*Display server generated errors*/
$('#form').empty().html(result.viewResult);
$('span.field-validation-error').each(function () {
$(this).parent().css({ "visibility": "visible" });
});
$('span.field-validation-valid').each(function () {
$(this).parent().css({ "visibility": "hidden" });
});
}
}
});
注意:this.RenderPartialView(“登录”,型号)是找到的自定义扩展方法here