ASP.NET MVC 3: сообщение о проверке на стороне клиента сохраняется после этого, если целевое поле отключено

#asp.net-mvc-3 #validation

#asp.net-mvc-3 #проверка

Вопрос:

У меня есть форма, в которой есть поле (поле A), которое должно быть пустым, если в выпадающем списке выбран вариант 1, и обязательно, если выбран вариант 2. У меня есть некоторый javascript, который очищает и отключает поле A при выборе опции 1.

У меня есть атрибут RequiredIf от Simon Ince, примененный к полю A в модели, зависящий от варианта 1, и он работает хорошо. Это не проблема.

Вот последовательность событий, которая вызывает проблему:

  1. У пользователя выбран вариант 2 (чтобы поле A было обязательным), а поле A пустым.
  2. Пользователь нажимает на Сохранить. Сообщение о проверке отображается по полю A и в сводке проверки. Все хорошо.
  3. Пользователь переходит к варианту 1. Поле A становится отключенным.
  4. Пользователь нажимает на Сохранить. Сообщение о проверке остается по полю A, но не отображается в сводке проверки.

Из этого я делаю вывод, что проверка RequiredIf работает (и поле A проходит проверку), но старое сообщение о проверке сохраняется. Чего я не хочу.

Кстати, все это на стороне клиента.

Если поле не отключено, все работает, как ожидалось, но я бы хотел, чтобы оно было отключено, а не редактируемым, но «должно быть пустым».

Есть ли способ исправить это, кроме удаления тега диапазона сообщений с помощью js и jQuery?

Ответ №1:

Поскольку требования к проверке меняются, вам необходимо выполнить проверку, а затем обновить все сообщения об ошибках. Поскольку проблема связана с изменением выбранного элемента в выпадающем списке, добавьте следующее:

 $("#myDropDown").live("change", function() { // assumes dropdownlist has id of 'myDropDown'
    $("form").validate().form(); // form() causes error messages to update
});
  

Комментарии:

1. Спасибо; Я попробую это. Но разве второе нажатие кнопки отправки на шаге 4, приведенном выше, не приведет к повторному запуску проверки? Я уже знаю, что это не приводит к удалению оставшегося сообщения о проверке. ETA: Нет, к сожалению, ваше предложение не заставило сообщение исчезнуть. Оно все еще сохраняется.

2. ДУХ! Вы хотели повторно выполнить проверку, ПРЕЖДЕ чем я отключу поле A! Да, это позаботилось об этом! Спасибо!