динамическая модель и ModelState
-
12-11-2019 - |
Вопрос
У меня есть такое действие:
Update([Bind(Prefix = "CurrentModel")] dynamic edited)
но когда я использую динамический ModelState.IsValid
всегда возвращает true, поэтому кажется, что для динамического объекта нет проверки?Если нет, то как я могу это решить?
Решение
Есть два случая:
Вы используете модели представления в качестве аргументов действия, и в этом случае связыватель модели по умолчанию автоматически назначает свойства и устанавливает возможные ошибки для состояния модели:
public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited) { if (ModelState.IsValid) { } ... }
Вы используете слабую типизацию либо с
dynamic
илиFormCollection
в этом случае связыватель модели по умолчанию не срабатывает и вообще не выполняет никакой проверки, поскольку он не способен определить ваш реальный тип модели.В этом случае вам нужно вручную вызватьTryUpdateModel
и укажите тип вашей модели:public ActionResult Update(dynamic edited) { var model = new MyViewModel(); if (!TryUpdateModel(model, "CurrentModel")) { // The model was not valid } ... }
Заключение:с использованием dynamic
аргумент действия в действии контроллера имеет мало смысла.