动态模型和ModelState

发布于 2024-10-26 03:40:29 字数 184 浏览 1 评论 0原文

我有一个像这样的操作:

Update([Bind(Prefix = "CurrentModel")]dynamicedited)

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

I have an Action like this:

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

but when I use dynamic the ModelState.IsValid always returns true so it seems like there is no validation on the dynamic object? If not, how can I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苏佲洛 2024-11-02 03:40:30

有两种情况:

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

    public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel 已编辑)
    {
        if (ModelState.IsValid)
        {
    
        }
        ...
    }
    
  2. 您正在使用一些弱类型与 动态FormCollection在这种情况下,默认模型绑定器不会启动,并且根本不执行任何验证,因为它无法推断您的真实模型类型。在这种情况下,您需要手动调用 TryUpdateModel 并指明您的模型类型:

    公共 ActionResult 更新(动态编辑)
    {
        var model = new MyViewModel();
        if (!TryUpdateModel(模型, "CurrentModel"))
        {
            // 模型无效
        }
        ...
    }
    

结论:在控制器操作中使用 dynamic 作为操作参数没有什么意义。

There are two cases:

  1. You are using view models as action arguments in which case the default model binder automatically assigns the properties and sets possible errors to the model state:

    public ActionResult Update([Bind(Prefix = "CurrentModel")] EditViewModel edited)
    {
        if (ModelState.IsValid)
        {
    
        }
        ...
    }
    
  2. You are using some weak typing with either dynamic or FormCollection in which case the default model binder doesn't kick in and doesn't perform any validation at all as it is not capable of infering your real model type. In this case you need to manually call TryUpdateModel and indicate your model type:

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

Conclusion: using dynamic as action argument in a controller action makes very little sense.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文