Как очистить ошибки проверки на стороне клиента MVC, когда нажата кнопка отмены, когда пользователь аннулировал форму?
У меня есть частичный вид, который отображается в основном представлении. В частичном представлении используются System.ComponentModel.DataAnnotations
и Html.EnableClientValidation()
.
Щелкнута ссылка, а div, содержащий частичный вид, отображается в JQuery.Dialog()
.
Затем я нажимаю кнопку сохранения без ввода какого-либо текста в моем подтвержденном поле ввода. Это заставляет проверку на стороне клиента срабатывать, как ожидалось, и отображать сообщение "* required" рядом с недопустимым полем.
Когда нажата кнопка отмены, я хочу, чтобы reset подтверждение MVC на стороне клиента возвращалось к состоянию по умолчанию и удаляло любые сообщения, готовые к тому, когда пользователь снова открывает диалоговое окно. Есть ли рекомендуемый способ сделать это?
Ответы
Ответ 1
Этот ответ для MVC3. См. Комментарии ниже, чтобы помочь обновить его до MVC 4 и 5
Если вы просто хотите очистить сообщения проверки, чтобы они не показывались пользователю, вы можете сделать это с помощью javascript:
function resetValidation() {
//Removes validation from input-fields
$('.input-validation-error').addClass('input-validation-valid');
$('.input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('.field-validation-error').addClass('field-validation-valid');
$('.field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
}
Если вам нужно reset работать только в вашем всплывающем окне, вы можете сделать это следующим образом:
function resetValidation() {
//Removes validation from input-fields
$('#POPUPID .input-validation-error').addClass('input-validation-valid');
$('#POPUPID .input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('#POPUPID .field-validation-error').addClass('field-validation-valid');
$('#POPUPID .field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('#POPUPID .validation-summary-errors').addClass('validation-summary-valid');
$('#POPUPID .validation-summary-errors').removeClass('validation-summary-errors');
}
Надеюсь, это тот эффект, который вы ищете.
Ответ 2
Если вы используете ненавязчивую проверку, которая поставляется с MVC, вы можете просто сделать:
$.fn.clearErrors = function () {
$(this).each(function() {
$(this).find(".field-validation-error").empty();
$(this).trigger('reset.unobtrusiveValidation');
});
};
-------------------------------------------- ----------------------------
Редактирование третьей стороны:
Это в основном работало в моем случае, но мне пришлось удалить строку $(this).find(".field-validation-error").empty();
. Это, похоже, повлияло на повторное отображение сообщений проверки при повторной отправке.
Я использовал следующее:
$.fn.clearErrors = function () {
$(this).each(function() {
$(this).trigger('reset.unobtrusiveValidation');
});
};
а затем вызывается следующим образом:
$('#MyFormId input').clearErrors();
Ответ 3
function resetValidation() {
$('.field-validation-error').html("");
}
Ответ 4
Спасибо. У меня был аналогичный вопрос для немного другого сценария. У меня есть экран, где, когда вы нажимаете одну из кнопок отправки, он загружает файл. В MVC, когда вы возвращаете файл для загрузки, он не переключает экраны, поэтому любые сообщения об ошибках, которые уже присутствовали в сводке проверки, остаются там навсегда. Я, конечно, не хочу, чтобы сообщения об ошибках оставались там после того, как форма была отправлена снова. Но я также не хочу очищать проверки на уровне поля, которые попадают на клиентскую сторону при нажатии кнопки отправки. Кроме того, некоторые из моих взглядов имеют более чем одну форму.
Я добавил следующий код (спасибо вам) в нижней части страницы Site.Master, чтобы он применился ко всем моим представлениям.
<!-- This script removes just the summary errors when a submit button is pressed
for any form whose id begins with 'form' -->
<script type="text/javascript">
$('[id^=form]').submit(function resetValidation() {
//Removes validation summary
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
});
</script>
Еще раз спасибо.
Ответ 5
Для этого вы можете использовать методы библиотеки проверки.
Есть два объекта, представляющих интерес: FormContext
и FieldContext
. Вы можете получить доступ к FormContext
с помощью свойства __MVC_FormValidation
и одного FieldContext
для каждого проверяемого свойства с помощью свойства FormContext
fields
.
Итак, чтобы очистить ошибки проверки, вы можете сделать что-то вроде этого form
:
var fieldContexts = form.__MVC_FormValidation.fields;
for(i = 0; i < fieldContexts.length; i++) {
var fieldContext = fieldContexts[i];
// Clears validation message
fieldContext.clearErrors();
}
// Clears validation summary
form.__MVC_FormValidation.clearErrors();
Затем вы можете перехватить этот фрагмент кода в зависимости от того, какое событие вам нужно.
Источники для этого (совершенно недокументированного) понимания:
Ответ 6
Чтобы очистить артефакты проверки, включая сообщение, цветной фон поля ввода и цветную контур вокруг поля ввода, мне нужно было использовать следующий код, где это было (в моем случае) Bootstrap модальный диалог, содержащий вложенную форму.
$(this).each(function () {
$(this).find(".field-validation-error").empty();
$(this).find(".input-validation-error").removeClass("input-validation-error");
$(this).find(".state-error").removeClass("state-error");
$(this).find(".state-success").removeClass("state-success");
$(this).trigger('reset.unobtrusiveValidation');
});
Ответ 7
Здесь вы можете просто удалить сообщение об ошибке
$('.field-validation-valid span').html('')
ИЛИ
$('.field-validation-valid span').text('')
![введите описание изображения здесь]()