.net mvc布局——layout.cshtml中 @RenderSection()和@RenderBody()的使用

_Layout.cshtml类似WebForm中的.master文件

_Layout.cshtml母版页代码:

<!DOCTYPE html>
<html lang="zh">
    <head>
        <title>@ViewBag.Title - 我的 ASP.NET MVC 应用程序</title>    
    </head>
    <body>       
        <div id="body">
            @RenderSection("featured", required: false)
            <section class="content-wrapper main-content clear-fix">
                @RenderBody()
            </section>
        </div>
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 应用程序</p>
                </div>
            </div>
        </footer>
        @Scripts.Render("~/bundles/jquery")
        @RenderSection("scripts", required: false)
    </body>
</html>

在Home控制器中添加TestRenderBody,并添加视图

 public ActionResult TestRenderBody()
        {
            ViewBag.Message = "这是RenderBody内容";
            return View();
        }
@{
    ViewBag.Title = "TestRenderBody";
}

<h2>@ViewBag.Message</h2>

访问视图  home/TestRenderBody:

前后对比html源码,发现只是将 TestRenderBody视图放到了_Layout.cshtml中的@RenderBody()中了

在layout.cshtml中添加一个 所有页面都可以使用的 footer @RenderSection , 

<footer>
            <div class="content-wrapper">
                @if (IsSectionDefined("footer"))//如果存在 section footer则展示此页面的footer内容
                {
                     @RenderSection("footer", required: false)//requiered为fasle子页面可以没有此footer,若设置为true则子页面必须添加,否则报错
                }
                else//没有则默认显示此footer
                {
                    <p>此页面没有定义footer</p>
                }               
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year - 我的 ASP.NET MVC 应用程序</p>
                </div>
            </div>
        </footer>

在TestRenderBody.cshtml中添加

@{
    ViewBag.Title = "TestRenderBody";
}

<h2>@ViewBag.Message</h2>
@section footer{
    <p>我是此页面的页脚</p>
    }

效果为:

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页