JQuery unobtrusive form validator не скрывает сообщения об ошибках при сбросе формы

Я пытаюсь правильно проверить и reset форму. Проверки выполняются отлично - поля, которые требуются, успешно контролируются. Однако, когда я перехожу к reset моей форме, я вижу только красный фон для моих входов, а не сообщения проверки.

В соответствии с jQuery проверить документацию:

Сбрасывает поля ввода в исходное значение (требуется плагин формы), удаляет классы с указанием недопустимых элементов и скрывает сообщения об ошибках.

Здесь вся информация, которая, как мне кажется, имеет отношение к проблеме. Пожалуйста, дайте мне знать, если вы хотите увидеть что-нибудь еще.

Вот как я создаю элемент DOM в моей модели. Этот элемент нуждается в проверке:

//Model.ascx
<div class="detailsRow required">
    <%= Html.LabelFor(model => model.Site) %>
    <%= Html.DropDownListFor(model => model.SelectedSiteID, new SelectList(Model.Site, "Key", "Value"))%>
    <%= Html.ValidationMessageFor(model => model.SelectedSiteID)%>
</div>

//Model.cs
[DisplayName("Site")]
public List<KeyValuePair<int, string>> Site { get; set; }

[Range(0, int.MaxValue, ErrorMessage = "Site required")]
public int SelectedSiteID { get; set; }

Сайт - это список выбора, который начинается со значения -1. Любой другой выбор действителен. Таким образом, я проверяю диапазон от 0 до макс.

Свыше в JavaScript я запускаю следующий код для своей формы, когда пользователь нажимает кнопку "Отправить" в форме:

var form = workflowDialogContent.find('form');
$.validator.unobtrusive.parse(form);
//Maintain a reference to the current formValidator to be able to reset.
var formValidator = $.data(form[0], 'validator');

if (form.valid()) {
}

Когда пользователь нажал кнопку "Отправить", форма будет подтверждена, и мое подтверждение будет показано, если выбранный сайт имеет значение -1. ​​

Теперь, всякий раз, когда выбор изменен, я хочу reset мою форму. Я взял эту логику из: Как очистить сообщения об ошибках проверки JQuery?

$(window).on('change', '#SelectedSiteID', function () {
    //Returns the formValidator we maintained a reference to.
    var validator = WorkflowDialogBuilder.getCurrentFormValidator();
    validator.resetForm();
    //TODO: resetForm documentation says that it hides the errors, but I did not experience this, so I am doing it manually.
    //$('.field-validation-error').empty();
}

Однако, когда я запускаю этот код... подсветка удаляется, но сообщения об ошибках остаются. Если я назову бит кода с комментариями, ошибки проверки будут скрыты, но они не появятся снова в следующий раз, когда моя форма будет проверена.

После проверки: enter image description here После вызова resetForm: enter image description here

Любые идеи, почему я буду видеть такое поведение?

Обновление: Как работает, следующий бит кода, похоже, выполняет правильную очистку:

$('.field-validation-error').empty();

Ответ 1

Я думаю, вы можете добавить это к своему обходному пути:

var form = $("#MyFormId");
form.find(':input').removeClass("input-validation-error");

Привет

Ответ 3

Единственная проблема с ответами, данными до сих пор, заключается в том, что все ошибки уходят, а не только те, которые вы хотите. У меня была аналогичная проблема с получением адреса, и если состояние DC, мне требуется запись квадранта (NW, NE, SW, SE). Я добавляю и удаляю требование с помощью jquery, а затем завершаю @Html.ValidationMessageFor() в div, затем просто спрячу div, когда выбрано другое состояние.

Ответ 4

который вы используете ниже, правильно?

var form = workflowDialogContent.find('form');

то вы должны использовать

form.resetForm();

до reset, он будет работать.