在一些ASP.NET MVC的代碼示例,我看到引用ModelState.IsValid
,而在其他的例子我看到ViewData.ModelState.IsValid
引用。有ModelState中和ViewData.ModelState之間的差異?
在我的初步研究,我看到:
ModelState
是Controller
類的公共屬性。ViewData
是ControllerBase
類的公共屬性。
有沒有兩者之間的區別嗎?爲什麼都有?
在一些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