Ошибки проверки ModelState для свойств, которых нет на мой взгляд - PullRequest
1 голос
/ 21 октября 2011

Предположим, это представление:

@Html.HiddenFor(model => model.Batiment.Client.Id)

@Html.LabelFor(model => model.Batiment.Code)</td>
@Html.EditorFor(model => model.Batiment.Code)</td>
<br>
@Html.LabelFor(model => model.Batiment.Nom)</td>
@Html.EditorFor(model => model.Batiment.Nom)</td>

Когда я отправляю свою форму на контроллере, ModelState недействителен для свойства "Nom", необходимого для моего класса Client. Верно, метаданные в моем классе Client установлены на обязательные, но я не включаю это поле в свое представление ...! Почему Mvc вызывает эту ошибку?

Могу ли я скрыть поле (например, Id) без указания всех обязательных полей в моем представлении?

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Ошибки входят в состояние модели во время привязки, поэтому вы можете исключить свойство из привязки, включив в подпись метода действия следующее:

public ActionResult Register([Bind(Exclude="PropertyName")] UserViewModel user)
{
   // Your logic here
}

Это должно исключить PropertyName из привязки, поэтому ошибка не войдет в состояние вашей модели и ваша проверка должна пройти успешно. Просто добавлю, я думаю, что это скорее взлом, а не решение. Если вам нужна только часть вашей модели представления, эта модель представления не должна использоваться, и вам следует подумать о создании новой модели представления без этого свойства.

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

0 голосов
/ 21 октября 2011

Нет, проверка выполняется на модели, а не на представлении, поэтому оно называется «состоянием модели». Для этого сценария необходимо создать другое представление.Это в точности для чего нужны ViewModels.Затем вы можете использовать такой инструмент, как AutoMapper, чтобы легко скопировать свойства между этой моделью представления в вашу базовую модель.

...