mvc4 renderpartial html,MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html...

@RenderSection相當於在母版頁占一個位置

解決頁面差異化的問題

如JS何CSS的調用

9c49bbeafd05eb8f4c9ebe2d811877dd.gif1

2

3

4

后台管理

5

6

7

8 @RenderSection("HeadJs")9

10

11 @RenderBody()12

13 9c49bbeafd05eb8f4c9ebe2d811877dd.gif

1 @section HeadJs{2

3 }

但是當如果使用了_Layout.cshtml做母版頁的頁沒有實現Section的話,

譬如我新建的Index.cshtml沒有實現@section SubMenu{...},就會拋出異常

31ec4ad2cdd7ca4105ed84ea42983235.png

這是因為我在_Layout.cshtml中使用的是@RenderSection("SubMenu")他要求所有子頁都要實現,

可以使用它的另外一個重載@RenderSection("SubMenu",false),第二個參數代表它不是必須的,就不會拋出異常。

還有,當我在母版頁中定義了@RenderSection("SubMenu",false)的時候,我希望當所有子頁都沒有實現這個Section

的時候,母版頁可以有自己的呈現內容,就可以用

9c49bbeafd05eb8f4c9ebe2d811877dd.gif9c49bbeafd05eb8f4c9ebe2d811877dd.gif

@if (IsSectionDefined("SubMenu"))

{

@RenderSection("SubMenu",false)

        }else{

SubMenu Sectionisnot defined!

}
9c49bbeafd05eb8f4c9ebe2d811877dd.gif 9c49bbeafd05eb8f4c9ebe2d811877dd.gif

這樣當沒有任何頁面呈現Section的時候,就會默認顯示定義的內容。

還有一種比較靈活的方法,通過擴展方法來實現9c49bbeafd05eb8f4c9ebe2d811877dd.gif9c49bbeafd05eb8f4c9ebe2d811877dd.gifpublicstaticclassUtility

{publicstaticHelperResult RenderSection(thisWebPageBase page,stringsectionName, FuncdefaultContent)

{if(page.IsSectionDefined(sectionName))

{returnpage.RenderSection(sectionName);

}else{returndefaultContent(null);

}

}

    }9c49bbeafd05eb8f4c9ebe2d811877dd.gif9c49bbeafd05eb8f4c9ebe2d811877dd.gif

在母版頁中@this.RenderSection("SubMenu", @

defaultsection content
)

OK了!沒有呈現Section時,就默認顯示

defaultsection content
.

四、@Html.Partial

Partial 每次都會創建自己的 TextWriter 實例並且把內容緩存在內存中. 最后把所有 writer輸出的內容發送到一個 MvcString對象中

更多時候我們會使用  @{ Html.RenderPartial("Details"); }  而不是@Html.Partial

Html.RenderPartial()與@Html.Partial的區別

Html.RenderPartial  直接輸出至當前 HttpContext(因為是直接輸出,所以性能好)。

Html.Partial            將視圖內容直接生成一個字符串並返回(相當於有個轉義的過程)。

RenderPage()和RenderPartial()的區別

RenderPage()調用的頁面只能使用其傳遞過去的數據。

而RenderPartial()是可以使用viewdata,model等數據的。

如:@{Html.RenderPartial("BasicChart",model);}

用這個重載可以在部分視圖里使用強類型,然后在主視圖中使用第二個參數傳model過去

@{Html.RenderPartial("BasicChart",ViewData["myData"]);}

Html.RenderPartial和Html.RenderAction的區別

Html.RenderPartial適合用在重覆使用的UserControl,並且只需要透過Model來呈現內容,或是對於廣告的UserControl也適合使用。

Html.RenderAction則會先去呼叫Controller的Action方法,如果此UserControl是需要透過資料庫取得資料來呈現(透過Action來讀取資料庫),此時會比較適合使用此方式。

補充:

1、帶有Render的方法返回值是void,在方法內部進行輸出;不帶的返回值類型為MvcHtmlString,所以只能這樣使用:

@Html.Partial 對應 @{Html.RenderPartial(....);}

@Html.Action 對應 @{Html.RenderAction(....);}

2、Html.Partial可以直接提供用戶控件名作為參數,而Html.Action需要有對應的Action,在Action內部返回PartailResult(即retun PartialView())。

3、對於簡單的沒有任何邏輯的用戶控件,推薦使用Html.Partial;對於需要設置一些Model的用戶控件,推薦使用Html.Action。當然,有Model數據也是可以使用Html.Partial方法的,可以看方法的重載。

4、使用Html.Action有個好處,就是可以根據不同的場景選擇不同的用戶控件。

比如:

@Html.Action("UserInfoControl")

在對應的UserInfoControl這個Action中,在用戶未登錄的時候,可以retun PartialView("LogOnUserControl");登錄后,可以retun PartialView("UserInfoControl");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值