@RenderSection相當於在母版頁占一個位置
解決頁面差異化的問題
如JS何CSS的調用
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>后台管理</title> 5 <link href="@Url.Content("~/Content/css.css")" rel="stylesheet" type="text/css" /> 6 <link href="@Url.Content("~/Content/style.css")" rel="stylesheet" type="text/css" /> 7 <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.js")"></script> 8 @RenderSection("HeadJs") 9 </head> 10 <body> 11 @RenderBody() 12 </body> 13 </html>
1 @section HeadJs{ 2 <script type="text/javascript" src="@Url.Content("")"></script> 3 }
但是當如果使用了_Layout.cshtml做母版頁的頁沒有實現Section的話,
譬如我新建的Index.cshtml沒有實現@section SubMenu{...},就會拋出異常
這是因為我在_Layout.cshtml中使用的是@RenderSection("SubMenu")他要求所有子頁都要實現,
可以使用它的另外一個重載@RenderSection("SubMenu",false),第二個參數代表它不是必須的,就不會拋出異常。
還有,當我在母版頁中定義了@RenderSection("SubMenu",false)的時候,我希望當所有子頁都沒有實現這個Section
的時候,母版頁可以有自己的呈現內容,就可以用
<
div id
=
"
sideBar
"
>
@if (IsSectionDefined( " SubMenu " ))
{
@RenderSection( " SubMenu " , false )
}
else
{
< p > SubMenu Section is not defined !</ p >
}
</ div >
@if (IsSectionDefined( " SubMenu " ))
{
@RenderSection( " SubMenu " , false )
}
else
{
< p > SubMenu Section is not defined !</ p >
}
</ div >
這樣當沒有任何頁面呈現Section的時候,就會默認顯示定義的內容。
還有一種比較靈活的方法,通過擴展方法來實現
public
static
class
Utility
{
public static HelperResult RenderSection( this WebPageBase page, string sectionName, Func < object , HelperResult > defaultContent)
{
if (page.IsSectionDefined(sectionName))
{
return page.RenderSection(sectionName);
}
else
{
return defaultContent( null );
}
}
}
{
public static HelperResult RenderSection( this WebPageBase page, string sectionName, Func < object , HelperResult > defaultContent)
{
if (page.IsSectionDefined(sectionName))
{
return page.RenderSection(sectionName);
}
else
{
return defaultContent( null );
}
}
}
在母版頁中
@this.RenderSection(
"
SubMenu
"
, @
<
div
>
default
section content
</
div
>
)
OK了!沒有呈現Section時,就默認顯示<div>default section content</div>.