首先,我要說的是,ASP.NET MVC的這個View並不是簡單的Page而已,它實現了介面IView
public interface IView {
void Render(ViewContext viewContext, TextWriter writer);
}
在ASP.NET MVC中,內建了一個預設的View那就是WebFormView
然後呢,在web請求到達controller,並且由controller返回ViewResult之後的操作,大概是這個樣子的:
- ViewResult本身執行 ExecuteResult方法。這個方法是ActionResult介面的方法,ViewResult是實現這個介面的一個類。
- 找到相應的View
- 構造ViewContext
- Render
- 建立ViewPage
- 設定Layout位置
ViewPage(System.Web.Mvc.ViewPage)和之前的WebPage(System.Web.UI.Page)主要的區別是,的唯一的也是最重要的功能就是呈現頁面。摒棄了WebPage的ViewState,PageEvents,Control層級關係。從代碼看,ViewPage實現了IView介面,而這個介面僅有一個方法,那就是Render。可見其功能已經很確定了。
ViewEngine在MVC中是用來確定View的。也就是說,它負責找到特定的視圖。預設的那個ViewEngine是WebFormViewEngine。如果呢,我們想要換一個視圖,不想繼續用aspx頁面了,那麼就需要重新構造一個ViewEngine,並註冊到系統裡。
Layout就相當於是MasterPage,不同的是,它沒有了PostBack機制和表單提交機制。也就是說,它只能夠為ViewPage布局。
ViewData之前已經說過一些了,View用它來呈現頁面。不過,在這裡要說的就是,一個View就只是對應一個ViewData,如果在一個View中有其他的PartialView,那麼它們之間的ViewData是不共用的,雖然預設情況下內容是相同的。
View還有一些其他的知識,比如:BindAttribute,ModelState 等等。以後再研究了,感覺第一次遇到這麼多東西,總是有一點混亂。
繼續了……