2012-11-10 153 views
18

我開始學習MVC4。我遇到了基於Razor模板或主頁創建視圖的兩種可能性。MVC佈局VS MVC主頁

我想了解兩個之間的實際差異。

現在,我可以看到,如果使用主頁創建視圖,我可以覆蓋多個部分。例如,如果我的主人定義了「左欄」佔位符和「身體」佔位符,我不僅可以爲特定的視圖定義主體,還可以在「左欄」部分中呈現內容,例如顯示控件綁定到頁面所在的上下文(從搜索框到股票報價查看器)。 此外,母版頁無法通過使用Razor模板進行定義,該模板比其他語法冗長得多(部分錯誤:someone設法破解此方面)。

對於剃刀布局,我只能定義一個可以被特定視圖覆蓋的頁面連續塊,並且我應該使用多個佈局(打破DRY)對頁面其他部分進行一些更改。 我以前的陳述是否正確或者我錯過了什麼?

很明顯,我可以通過充分利用jQuery的的渲染頁面的任何一部分內容,卻是另一回事

+1

在剃刀布局中,您可以定義多個「節」。你應該閱讀這篇關於[layouts and sections]的文章(http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor .aspx)在Razor工作。 – nemesv

回答

26

你可以用切片用剃刀。斯科特谷的博客上講述他們在這裏:http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

在你的佈局,如你所願,你可以定義爲許多部分:

<div id="leftMenu"> 
    @RenderSection("LeftMenu", required: false) 
</div> 

,你可以在你的意見重寫:

@section LeftMenu { 
    <div>... here comes the left menu for this view ...</div> 
} 

你也可以測試某個部分是否已在視圖中定義,如果未提供某些默認內容:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu") 
} 
else { 
    <div>Some default left menu</div> 
} 
11

從MVC3開始,引入了剃鬚刀視圖引擎。在高層次上,視圖引擎基本上是視圖並呈現必要的HTML。 Razor使用_layout文件,它自己的模板系統與主頁面相似。但是,MVC3和4具有另一個視圖引擎,稱爲WebForms視圖引擎,並且使用母版頁。如果您查看舊的MVC1和MVC2教程,您將看到母版頁,因爲在MVC3之前,只有WebForms視圖引擎。

現在在功能方面,兩者都很相似。主頁允許您定義內容佔位符,而剃鬚刀則允許您定義段落。一個主要的區別在於頁面的渲染方式。主頁面將頁面呈現在外面,這意味着首先是主頁面,然後是內容佔位符。 Razor是我相信遞歸的,從最裏面的部分開始,然後回到原來的狀態。

看看這個博客帖子上剃刀布局 http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

而言,其中一個是首選,同時查看引擎確實存在更多的信息,但如果你想ulitize剃刀語法時才(我強烈推薦)那麼你必須使用佈局系統。 Razor不允許您使用母版頁。

+2

謝謝你的詳細解答。 – RayLoveless