jQuery - отлавливать обратный вызов валидации с сервера
Я пытаюсь перехватить обратный вызов ошибки плагина jquery validate. Я понимаю, что вы можете легко подключиться к этому, если бы я вызывал команду 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; }
и мне нужно сделать его видимым только тогда, когда есть сообщение об ошибке (потому что оно имеет фон и не принадлежит, если нет ошибки внутри).
Как я могу это сделать? Оптимальным решением было бы то, где я могу ответить на ошибку из ОБА клиентской и серверной проверки, потому что я планирую встроить проверку на стороне клиента после того, как удостоверился, что сторона сервера покрыта. Я думаю, что лучший вопрос, то есть ли способ получить invalidHandler
ответный огонь с сервера вернул ошибки?
1 ответ
Я просто подумал об этом и еще не проверял, но думаю, что это сработает. Отзовусь. Спасибо Барни, ваш комментарий дал мне лампочку.
$.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("Логин", модель) - это пользовательский метод расширения, найденный здесь.