2014-04-25 40 views
1

我有一個雙胞胎的佈局設置,可以呈現整個頁面(包含導航),也可以只顯示內容,具體取決於它是否是Ajax請求。我做到這一點,像這樣:MVC中的條件部分

_LayoutRightPanel.cshtml

@{ 
    Layout = !Request.IsAjaxRequest() ? "~/Views/Shared/_Layout.cshtml" : null; 
} 

這工作對大多數的網頁,而是通過包含@section{}小號不工作的Ajax請求的網頁(正常加載當他們這樣做)。我收到以下錯誤:

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_LayoutRightPanel.cshtml": "scripts".

在我_LayoutRightPanel的底部我下面來渲染腳本,強制將部分呈現在主佈局或使其當前頁面上如果一個Ajax請求

@if (Request.IsAjaxRequest()) 
{ 
    RenderSection("scripts", false); 
} 
else{ 
    @section scripts{ 
     @RenderSection("scripts", false) 
    } 
} 
+0

當您通過Ajax更新部分頁面時,爲何不將腳本放入部分視圖中而不是更改整個佈局。 –

+0

那就是我想要做的 – Chris

回答

0
@section scripts{ 
    @RenderSection("scripts", false) 
} 

你爲什麼渲染scripts部分scripts部分裏面?我不明白如何以任何方式結束,但錯誤或無限遞歸(以錯誤結束)。

編輯這是不正確。在下面看到我的更新。

RenderSection()應該在_Layout頁面(或任何包裹當前視圖的頁面)上使用。這是目標位置(您希望該部分結束的位置)

@section scripts{}應在您的(部分)視圖上使用。這是源位置(您在此定義該部分的內容)。

具有相同的頁面上的相同部分都引用擊敗爲什麼你應該使用部分擺在首位(通過某些HTML部分以外,包裝視圖(例如_Layout.cshtml))

的目的

輕微更新
直接回答你的問題,我認爲錯誤被拋出,因爲RenderSection呼叫那是@section裏面找不到所謂的「腳本」,因爲它尚未定義的任何部分(你在這個過程中定義它)。

更新

According to this SO question,重名不應該是一個問題(所以你可以忽略我下面的評論)。

但是,問題的根本原因(在那個問題)是腳本部分沒有鏈接(即你不能渲染第2節佈局頁面,它必須在特定的佈局頁面你的看法(然後繼續向上鏈接到下一個佈局頁)。

你能否證實被設置爲打算?

或許offtopic,但沒有任何附加值,通過腳本部分到上部佈局頁面?既然你要以任何方式渲染這個部分,如果你總是把它放在_LayoutRightPanel頁面中,它是否會失效?

+0

請記住,我有兩個嵌套佈局頁面。第一個,如果它是完整頁面請求的一部分,則簡單地將腳本渲染到其父佈局。如果它的AJAX請求嘗試渲染腳本部分本身 – Chris

+0

嘗試對腳本部分使用不同的名稱。如果您開始使用重複的名稱,那麼「串行輸入」的內容通常不起作用。永遠不應該有這樣一種情況,即您在同一頁面文檔中設置和渲染相同的部分。 – Flater

+0

@Chris:重複名稱不是問題。我更新了我的答案。 – Flater