MVC3 Razor @RenderSection

本文详细介绍了ASP.NET MVC3中@RenderSection的使用方法,包括如何在母版页预留位置供子页面填充内容,以及如何处理未实现Section的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mvc3的Razor视图引擎还提供了@RenderSection


我的理解:@RenderSection在母版页中占个位,然后让使用此母版页的子页自己去呈现他们的Section。


在母版页_Layout.cshtml中定义@RenderSection("Section名")


复制代码
<body>
    <div id="header">@{Html.RenderAction("Menu", "Global");}</div>
    <div id="sideBar">
      @RenderSection("SubMenu")
    </div>
    <div id="container">@RenderBody()</div>
    <div id="footer">@{Html.RenderAction("Footer", "Global");}</div>
</body>
复制代码


 


添加一个About.cshtml,使用_Layout.cshtml做母版页


然后就可以在About.cshtml中定义"SubMenu"要呈现的内容


复制代码
@{
    ViewBag.Title = "About";
 }

 @section SubMenu{
    Hello This is a section implement in About View.
 }
复制代码


这里我在About.cshtml中实现了SubMenu,运行结果



 


但是当如果使用了_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的时候,就会默认显示定义的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值