Я пытаюсь правильно проверить и 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();
}
Однако, когда я запускаю этот код... подсветка удаляется, но сообщения об ошибках остаются. Если я назову бит кода с комментариями, ошибки проверки будут скрыты, но они не появятся снова в следующий раз, когда моя форма будет проверена.
После проверки: После вызова resetForm:
Любые идеи, почему я буду видеть такое поведение?
Обновление: Как работает, следующий бит кода, похоже, выполняет правильную очистку:
$('.field-validation-error').empty();