Вопрос

У меня есть такое действие:

Update([Bind(Prefix = "CurrentModel")] dynamic edited)

но когда я использую динамический ModelState.IsValid всегда возвращает true, поэтому кажется, что для динамического объекта нет проверки?Если нет, то как я могу это решить?

Это было полезно?

Решение

Есть два случая:

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

    public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
    {
        if (ModelState.IsValid)
        {
    
        }
        ...
    }
    
  2. Вы используете слабую типизацию либо с dynamic или FormCollection в этом случае связыватель модели по умолчанию не срабатывает и вообще не выполняет никакой проверки, поскольку он не способен определить ваш реальный тип модели.В этом случае вам нужно вручную вызвать TryUpdateModel и укажите тип вашей модели:

    public ActionResult Update(dynamic edited)
    {
        var model = new MyViewModel();
        if (!TryUpdateModel(model, "CurrentModel"))
        {
            // The model was not valid
        }
        ...
    }
    

Заключение:с использованием dynamic аргумент действия в действии контроллера имеет мало смысла.

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