Dot-Net

_ViewStart.cshtml 中的 RenderSection() 問題

  • October 21, 2013

我在 _Layout.cshtml 中截斷了以下程式碼

<div id="sub-navig-container">
   @RenderSection("subNavig")
</div>

<div id="text-content">
   @RenderBody()
</div>

當我添加到我的視圖中時

@section subNavig
{
   //some code
}

它工作得很好,但是當我在 _ViewStart 中寫這個時出現錯誤: 目前上下文中不存在名稱“DefineSection” 在此處輸入圖像描述

請解釋原因,如果可能的話,告訴我如何解決這個問題

_ViewStart 是一個特殊視圖,它派生自其他視圖,ViewStartPage而不是WebViewPage其他視圖派生自該視圖。而且這個ViewStartPage類沒有DefineSection方法。所以你不能在這個文件中定義部分。您可以直接在佈局中為該部分提供預設內容:

<div id="sub-navig-container">
   @if (!IsSectionDefined("subNavig"))
   {
       // some default code
   }
   else
   {
       // render the code that was overridden in the child view
       @RenderSection("subNavig")
   }
</div>

假設如果在 ViewStart 類中定義了 RenderSection,那麼 Razor 視圖引擎如何知道您正在渲染的部分?RenderSection 在設計上只消耗視圖使用它們立即定義的部分。由於 ViewStart 在任何視圖請求的程式碼執行之前執行,這就是它在那裡不可用的原因。

這是設計使然。目前 Razor 佈局只能使用(渲染)由使用它們的視圖立即定義的部分。您不能擁有佈局頁面的層次結構,並且在最外層佈局中使用最內層視圖中定義的部分。

http://forums.asp.net/t/1623650.aspx/1

引用自:https://stackoverflow.com/questions/8147763