2011-09-29 61 views
13

我有一個頂級_Layout.cshtml,看起來是這樣的:在MVC Razor中,如何在子佈局下定義RenderSection?

<html> 
<head> 
    @RenderSection("Header", required: false) 
</head> 
<body> 

    @RenderSection("LeftPane", required: false) 
    @RenderSection("RightPane", required: false) 
    @RenderBody() 

</body> 
</html> 

然後我有兩個「子佈局。」一個定義了LeftPane部分,另一個定義了一個LeftPane和一個RightPane。這些子佈局稱爲_LeftPane.cshtml和_LeftPlusRightPane.cshtml,它們的佈局設置爲「_Layout.cshtml」。

然後在每個View .cshtml文件中,我將Layout設置爲_LeftPane.cshtml或_LeftPlusRightPane.cshtml,具體取決於我想在頁面上顯示的內容。

這一切工作正常。問題在於我在文檔的<head>部分添加了新的「標題」部分。本部分未在子佈局中定義,而是在實際視圖中定義。當我嘗試以這種方式查看某些內容時,出現以下錯誤:

以下各節已定義,但尚未針對佈局頁面「〜/ Views/Shared/_LeftPlusRightPane.cshtml」:「標題」進行渲染。

我不想在sublayouts中渲染Header部分,我想在_Layout.cshtml文件中渲染它。我如何從低級視圖中,通過子佈局,直到頂部的_Layout「傳遞」定義的標題部分?

+0

你能粘貼你的部分是什麼樣子?我認爲你只是沒有適當地在各個視圖中包裝各個部分。 – Fourth

+0

我遇到問題的唯一部分是新的標題部分。一個從我的視圖的一個實例:@section部首 { <腳本類型= 「文本/ JavaScript的」 SRC = 「/包括/太極拳-3.0/shadowbox.js」> } –

回答

25

您可以嵌套佈局。所以_Layout2有Layout = "_Layout.cshtml";

您也可以在每個View子文件夾中使用_ViewStart文件來爲該子文件夾指定不同的默認佈局。

要「通過」的部分,你只是做這樣的事情:

@section Header {@RenderSection("Header", false)} 

這允許您通過內容鏈。

+0

謝謝,這正是我試圖做! –

+0

太棒了,我只是在尋找,非常感謝! – vtortola

+0

謝謝,它對我非常有幫助 – MNR

相關問題