有ModelState中和ViewData.ModelState之间的差异?

问题描述:

在一些ASP.NET MVC的代码示例,我看到引用ModelState.IsValid,而在其他的例子我看到ViewData.ModelState.IsValid引用。有ModelState中和ViewData.ModelState之间的差异?

在我的初步研究,我看到:

  • ModelStateController类的公共属性。
  • ViewDataControllerBase类的公共属性。

有没有两者之间的区别吗?为什么都有?

+0

同样的事情。就像'System.Int32'和'Int32'一样。有些人只是喜欢使用完全限定的命名空间。 – Yorro

他们引用同样的事情,如果你看一下System.Web.Mvc.Controller类的代码,你会看到ModelState实现如下:

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

我会说这简直是有易于使用的在自己的控制器实现。

+1

是的,在我自己的测试中,我看到'ModelState.IsValid'和'ViewData.ModelState.IsValid'都是相同的ModelStateDictionary。 ModelStateDictionary包含ModelState对象。 –

他们是同一个,而你可能在你的控制器使用ViewData.ModelState.Errors - 有它作为ControllerBase属性仅仅是一个方便,让您缩短到ModelState.Errors(和更经常使用ModelState.IsValid)。

虽然从“最终开发者”的角度来看ModelState主要用于控制器,但ViewData被用作控制器和视图之间通信的所有数据的容器。这就是为什么它也需要包括ModelState - 因为,尽管你很少在视图中直接使用它,ModelState就是例如许多HtmlHelper方法在从POST动作呈现视图时实际上默认获取值 - 而不是Model