如果我做錯了什麼,我想開悟。我敢打賭,我是。在ASP.NET MVC中,使用@RenderSection的優點是什麼(與@RenderPage相比)?
如果我有我的看法頁面下面的代碼:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
sample content.
</p>
@section header
{
<div id="header">
Chapter 3a: Creating a Consistent Look
</div>
}
...我也應該有我的頁面佈局的FF呈現部分(如果有的話),以防止異常的運行 - 時間:
@if (IsSectionDefined("header"))
{
@RenderSection("header")
}
但是,如果我沒有在最後的4行以上渲染部分(比如,我評論他們全部)之前檢查的部分,編譯器將不檢查,我有一節在我的視圖頁面中定義,並允許我構建和運行應用程序。在運行時,它只有這樣,當我運行的頁面,我會得到這個錯誤:
下面的章節已被定義,但對於佈局頁面「〜沒有被渲染 /查看/共享/ _Layout2.cshtml「:」標題「。
我的問題則是FF:
- 我們怎樣才能防止這種情況發生?是否有任何設置強制編譯器檢查丟失的
@RenderSection
代碼? - 因爲我們需要在整個應用程序中手動搜索關鍵字
@section
,因此@section
功能的使用不會使系統的可維護性降低(假設問題#1沒有正面答案)? - 在這種情況下,使用
@RenderSection
而不是@RenderPage
有什麼好處? - 我們是否也可以使
@section
有條件?
感謝您的快速回答。至於section與佔位符概念的關係,根據我的理解,在服務器端代碼中檢查是否存在佔位符對象(因爲如果該佔位符對象不能在後面的代碼中使用佔位符對象存在於你的頁面中),而字符串(比如「header」)在編譯時沒有被檢查。我希望我能正確理解你對佔位符的使用。謝謝! – nolisj
其實不是。這不是它的工作原理。後面的代碼根本就沒有關係。實際上,因爲Mvc2 aspx視圖甚至沒有文件後面的代碼。我的意思是,在概念級別, 標記等同於@RenderSection()語句,而標記等同於@section {}聲明。我並不是暗示他們的工作原理完全相同。儘管如此,我仍然確信在編譯時沒有檢查兩者。您可以嘗試在csproj中將標記設置爲true,並查看是否有任何改進。 –
我明白你的意思。我以爲你指的是這個佔位符()而不是這個佔位符()。 至於他們的相似性(ContentPlaceHolder == @RenderSection(); Content == @section),據我所知,你似乎是正確的。然而,ContentPlaceHolder/Content對與@RenderSection()/ @ section對不同的是,ContentPlaceHolder/Content對(以及它們之間的關係)比@RenderSection()/ @更明顯/明確/可見。部分對。 –
nolisj