2014-03-06 96 views
2

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

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

  • ModelStateController類的公共屬性。
  • ViewDataControllerBase類的公共屬性。

有沒有兩者之間的區別嗎?爲什麼都有?

+0

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

回答

2

他們引用同樣的事情,如果你看一下System.Web.Mvc.Controller類的代碼,你會看到ModelState實現如下:

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

我會說這簡直是有易於使用的在自己的控制器實現。

+1

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

1

他們是同一個,而你可能在你的控制器使用ViewData.ModelState.Errors - 有它作爲ControllerBase屬性僅僅是一個方便,讓您縮短到ModelState.Errors(和更經常使用ModelState.IsValid)。

雖然從「最終開發者」的角度來看ModelState主要用於控制器,但ViewData被用作控制器和視圖之間通信的所有數據的容器。這就是爲什麼它也需要包括ModelState - 因爲,儘管你很少在視圖中直接使用它,ModelState就是例如許多HtmlHelper方法在從POST動作呈現視圖時實際上默認獲取值 - 而不是Model