• ASP.NET MVC中的嵌套布局页


    在WEB窗体模式中,用惯了母版页,并且常有母版页嵌套的情况。


    而在MVC模式下,对应母版页的,称作为布局页。默认的布局页为 ~/Views/Shared/_Layout.cshtml。默认每个页面都会嵌于其中,因为在~/Views/_ViewStart.cshtml里已经写好:

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    当然,这个应该可以改的,但一般没有必要。我的做法是,将_Layout.cshtml作为基本母版页,然后再在上面衍生出各种子母版页。以下分别是_Layout.cshtml和某一子布局页(_SingleContent_Layout.cshtml)的代码:

    _Layout.cshtml

    @using common = www.AppCode.Common;
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>@common.GetTitle(ViewBag.IndependentTitle,ViewBag.Title)</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    	<!-- 子页插入到head的入口。相当于母版页里的ContentPlaceHolder -->
        @RenderSection("header", required: false)
    </head>
    <body>
        <div>
            <div id="ly_Top" class="ly_960">
                <div id="ly_User">
    				<!-- 登录信息。相当于用户控件 -->
                    @{Html.RenderAction("LoginInfo", "Partial");}
                </div>
                <div id="ly_Web">
                </div>
            </div>
    
            <div id="ly_NaviContainer">
                <div id="ly_Navi">
                    <div class="ly_960">
                        <div id="ly_Logo" onclick="location.href='/'"></div>
                        <div>
    						<!-- 导航条。相当于用户控件 -->
                            @{Html.RenderAction("Navi"
                                  , "Partial"
                                  , new { parentController = ViewContext.RouteData.Values["controller"].ToString() });}
                        </div>
                    </div>
                </div>
            </div>
    
            <div id="ly_Main">
    			<!-- 输出嵌套页 -->
    			@RenderBody()
            </div>
       </div>
    
        @Scripts.Render("~/bundles/jquery182")
    	<!-- 子页插入到页面底部的入口。相当于母版页里的ContentPlaceHolder -->
        @RenderSection("scripts", required: false)
    </body>
    </html>
    

    子母版页_SingleContent_Layout.cshtml

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    @section header{
        @Styles.Render("~/Content/SingleContent")
    	@* 这是本子布局页的子页插入内容的入口,注意到没?它写在本子布局页插入母版页的入口处*@
        @RenderSection("header", required: false)
    }
    @section Scripts {
        @RenderSection("scripts", required: false)
    }
    <div class="content_box container">
        <div class="content_box_in">
            @RenderBody()
        </div>
    </div>

    内容页index.cshtml

    @{
        ViewBag.Title = "Service";
        Layout = "~/Views/Shared/_SingleContent_Layout.cshtml";
    }
    
    <div class="service">
        <h2>服务条款</h2>
    </div>	


    参考文章:

    http://www.cnblogs.com/haiyabtx/archive/2012/06/12/2545821.html




  • 相关阅读:
    桥牌笔记:三个输墩压缩为一个
    读书笔记2013第7本:《杠杆阅读术》
    读书笔记2013第6本:《棋与人生》(一)
    《Two Dozen Short Lessons in Haskell》(二十)分数
    《Two Dozen Short Lessons in Haskell》学习(十八) 交互式键盘输入和屏幕输出
    Exercise: A Routine Day
    读书笔记2013第6本:《棋与人生》(二)
    读书笔记2013第8本:《超级快速阅读》
    TC的房子
    [转贴]Windows批处理调用程序后如何自动退出
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257975.html
Copyright © 2020-2023  润新知