#asp.net-mvc-3 #validation
#asp.net-mvc-3 #проверка
Вопрос:
У меня есть форма, в которой есть поле (поле A), которое должно быть пустым, если в выпадающем списке выбран вариант 1, и обязательно, если выбран вариант 2. У меня есть некоторый javascript, который очищает и отключает поле A при выборе опции 1.
У меня есть атрибут RequiredIf от Simon Ince, примененный к полю A в модели, зависящий от варианта 1, и он работает хорошо. Это не проблема.
Вот последовательность событий, которая вызывает проблему:
- У пользователя выбран вариант 2 (чтобы поле A было обязательным), а поле A пустым.
- Пользователь нажимает на Сохранить. Сообщение о проверке отображается по полю A и в сводке проверки. Все хорошо.
- Пользователь переходит к варианту 1. Поле A становится отключенным.
- Пользователь нажимает на Сохранить. Сообщение о проверке остается по полю 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! Да, это позаботилось об этом! Спасибо!