Повторная проверка измененной модели представления в методе контроллера?

StackOverflow https://stackoverflow.com/questions/7833396

Вопрос

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 у меня не сработал, так как он необрабатывать вложенные объекты.

Наконец, я остановился на привязке пользовательской модели:

родовое слово

в классе модели:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top