有ModelState中和ViewData.ModelState之间的差异?
在一些ASP.NET MVC的代码示例,我看到引用ModelState.IsValid
,而在其他的例子我看到ViewData.ModelState.IsValid
引用。有ModelState中和ViewData.ModelState之间的差异?
在我的初步研究,我看到:
-
ModelState
是Controller
类的公共属性。 -
ViewData
是ControllerBase
类的公共属性。
有没有两者之间的区别吗?为什么都有?
他们引用同样的事情,如果你看一下System.Web.Mvc.Controller
类的代码,你会看到ModelState
实现如下:
public ModelStateDictionary ModelState
{
get
{
return this.ViewData.ModelState;
}
}
我会说这简直是有易于使用的在自己的控制器实现。
是的,在我自己的测试中,我看到'ModelState.IsValid'和'ViewData.ModelState.IsValid'都是相同的ModelStateDictionary。 ModelStateDictionary包含ModelState对象。 –
他们是同一个,而你可能在你的控制器使用ViewData.ModelState.Errors
- 有它作为ControllerBase
属性仅仅是一个方便,让您缩短到ModelState.Errors
(和更经常使用ModelState.IsValid
)。
虽然从“最终开发者”的角度来看ModelState
主要用于控制器,但ViewData
被用作控制器和视图之间通信的所有数据的容器。这就是为什么它也需要包括ModelState
- 因为,尽管你很少在视图中直接使用它,ModelState
就是例如许多HtmlHelper方法在从POST动作呈现视图时实际上默认获取值 - 而不是Model
。
同样的事情。就像'System.Int32'和'Int32'一样。有些人只是喜欢使用完全限定的命名空间。 – Yorro