0

我有这样的动作:

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

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

4

1 回答 1

2

有两种情况:

  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在控制器动作中使用作为动作参数没有什么意义。

于 2011-03-26T11:30:55.237 回答