@RenderSection 用法


 

@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 >
復制代碼

 這樣當沒有任何頁面呈現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 );
               
            }
        }
    }
復制代碼

 

 在母版頁中

@this.RenderSection( " SubMenu " , @ < div > default  section content </ div > )

 

 OK了!沒有呈現Section時,就默認顯示<div>default section content</div>.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM