ModelState和ViewData.ModelState之间有区别吗?

时间:2014-03-06 22:33:04

标签: asp.net-mvc modelstate viewdata

在一些ASP.NET MVC代码示例中,我看到了对ModelState.IsValid的引用,在其他示例中,我看到了对ViewData.ModelState.IsValid的引用。

在我最初的研究中,我看到了:

  • ModelStateController类中的公共财产。
  • ViewDataControllerBase类中的公共财产。

这两者有区别吗?为什么两者兼而有之?

2 个答案:

答案 0 :(得分:2)

他们引用完全相同的内容,如果您查看System.Web.Mvc.Controller类的代码,您会看到ModelState的实现是:

   public ModelStateDictionary ModelState
    {
      get
      {
        return this.ViewData.ModelState;
      }
    }

我想说它只是在你自己的Controller实现中易于使用。

答案 1 :(得分:1)

他们是同一个,你可以在你的控制器中使用ViewData.ModelState.Errors - 将它作为ControllerBase上的属性真的只是一个方便,允许你将其缩短为ModelState.Errors(以及更常用的ModelState.IsValid)。

虽然“终端开发人员”视角中ModelState的主要用途是在控制器中,但ViewData用作控制器和视图之间通信的所有数据的容器。这也是为什么它还需要包含ModelState的原因 - 因为虽然您很少直接在视图中使用它,但ModelState是从POST操作渲染视图时,许多HtmlHelper方法实际上默认获取值 - 而不是Model