2011-02-12 31 views
3

我一直在觀看Scott Hanselmnn教授MVC 2技巧/技巧的video。他提到了默認情況下MVC 2如何使用ASP.NET Web窗體視圖引擎來呈現視圖的輸出;他提到Web表單視圖引擎比MVC 2稍微慢一些,因爲它生成一個控件樹,然後將HTML輸出到頁面(我希望我說得對)。ASP.NET Web Form渲染引擎輸出一個控制樹?尋找渲染邏輯信息

我想知道他在將HTML輸出到頁面之前生成代碼樹的意思。有沒有人對Web表單的視圖引擎有所瞭解,並且渲染過程的步驟對ASP.NET和MVC2有效?

回答

1

在Web窗體中,HTML由控件層次結構生成,每個控件都需要調用以呈現其HTML,並且每個控件都對頁面視圖狀態有貢獻。另外,Web Forms(Init,PreRender等)在其生命週期中觸發了大量事件,層次結構中的每個控件也觸發類似的事件。

在MVC中,這個過程理論上可以簡單得多,因爲您沒有深層次的控件,沒有ViewState,而且您也不需要觸發事件。然而,MVC「揹負」ASP.NET框架,所以在幕後,很多Web Forms的東西仍然存在,儘管它不是必需的。

1

ASP.Net WebForms都是圍繞着「僞裝」一個圍繞HTTP的無狀態本質的有狀態模型而構建的。這個想法是爲WinForms開發人員提供一個熟悉的環境,例如控件,事件等等。

爲了做到這一點,標記被解析成內存中的對象集合,然後您可以引用它你會在的WinForms控制:

TextBox.Text = "I hate viewstate!"; 

每個控件添加到表示網頁控件的集合將被髮送回客戶端。當需要構建響應時,引擎遍歷樹形控件集合,並要求每個控件以Render itself作爲輸出流。結果就是你以HTTP響應的形式得到的結果。

在MVC中,這是一個不必要的步驟,因爲這些控件從未被引用。 MVC包含網絡的無狀態特性,而是將發佈的表單變量直接映射到供Controller Actions使用的模型。