在一些ASP.NET MVC代码示例中,我看到了对ModelState.IsValid
的引用,在其他示例中,我看到了对ViewData.ModelState.IsValid
的引用。
在我最初的研究中,我看到了:
ModelState
是Controller
类中的公共财产。ViewData
是ControllerBase
类中的公共财产。这两者有区别吗?为什么两者兼而有之?
答案 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
。