动态模型和ModelState

时间:2011-03-26 10:46:51

标签: asp.net-mvc-3 model-binding defaultmodelbinder

我有这样的行动:

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

但是当我使用dynamic时,ModelState.IsValid总是返回true,所以看起来动态对象上没有验证?如果没有,我该如何解决?

1 个答案:

答案 0 :(得分:2)

有两种情况:

  1. 您正在使用视图模型作为操作参数,在这种情况下,默认模型绑定器会自动分配属性并将可能的错误设置为模型状态:

    public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
    {
        if (ModelState.IsValid)
        {
    
        }
        ...
    }
    
  2. 您正在使用dynamicFormCollection进行一些弱类型操作,在这种情况下,默认模型绑定器不会启动,也不执行任何验证,因为它不是能够推断出你真实的模特类型。在这种情况下,您需要手动调用TryUpdateModel并指明您的模型类型:

    public ActionResult Update(dynamic edited)
    {
        var model = new MyViewModel();
        if (!TryUpdateModel(model, "CurrentModel"))
        {
            // The model was not valid
        }
        ...
    }
    
  3. 结论:在控制器动作中使用dynamic作为动作参数几乎没有意义。