Повторная проверка измененной модели представления в методе контроллера?
-
27-10-2019 - |
Вопрос
EDIT - мы используем предварительную версию MVC4 Dev ....
Я создаю страницу редактирования для класса FishingTrip
. FishingTrip
содержит дочернюю коллекцию простых объектов Crew
(например, FishingTripID, CrewID, CrewPosition).
Я использую подход Джарретта Мейера для добавления, редактирования и удаления из коллекции Crew
.
Я использую ненавязчивую проверку, чтобы указать, что все свойства Crew
- это Required
.
Моя проблема: когда я логически удаляю элемент из списка (в соответствии с методом Джарретта), я не хочу, чтобы этот элемент проверялся.
Я успешно настроил метод removeRow на стороне клиента, чтобы отключить ненавязчивую проверку для логически удаленного элемента, чтобы форма публиковалась, несмотря на наличие элемента, содержащего пустые поля.
В моем методе контроллера [HttpPost] Edit
, ModelState.IsValid
начинается как false (как и ожидалось - из-за логически удаленного элемента, содержащего пустые поля). Поэтому я удаляю этот элемент из моей ViewModel .... но ModelState.IsValid
по-прежнему ложно.
Таким образом, я (думаю, что) хочу изменить свою ViewModel в методе контроллера, чтобы удалить проблемный элемент, затем вызвать своего рода «revalidate» и показать, что ModelState.IsValid
отображается как true.
Есть идеи?
Решение
После того, как вы удалили проблемные элементы, очистите ModelState и снова подтвердите, например:
родовое слово Примечание . Будьте осторожны при использовании метода TryValidateModel
, поскольку этот метод не проверяет вложенный объект модели (как указано @Merenzo).
Другие советы
Поздно в игру, но все же:
Я также искал способ проверить модель после внесения в нее некоторых настроек (точнее - элементов ее вложенной коллекции) - и TryValidateModel
у меня не сработал, так как он необрабатывать вложенные объекты.
Наконец, я остановился на привязке пользовательской модели:
родовое словов классе модели:
родовое слово