布局类似于APSX视图的母版页 用的是Razor的语法

创建布局

布局页面默认放在Shared目录 有几个自动生成的cshtml文件 删除它们 然后创建一个视图 命名为MyLayOut 取消勾选使用母版页或布局 打开该文件 删除以下代码

 @{
     Layout = null;
 }

我们将这个文件当做一个布局页面来使用 首先需要修改Views目录下的_ViewStart.cshtml 因为我们删掉了默认的布局页 所以在此视图中需要修改Layout的值 让其指向我们自定义的布局页

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

接着就可以使用以下方法来渲染子页面视图到布局页面中

RenderBody方法

渲染一个子视图  只要子视图是根据当前布局页创建的 则RenderBody指向的就是该视图 如

 <!DOCTYPE html>
 <html>
 <head>
     <meta name="viewport" content="width=device-width" />
     <title>MyLayOut</title>
 </head>
 <body>
     <div style="background:#ff5252;width:400px;height:100px;font:12px 微软雅黑;padding:10px;color:white;">
         <h1>布局页</h1>
      </html>

然后在控制器中创建一个ChildPage的Action方法

 public ActionResult ChildPage()
 {
     return View();
 }
  

为该Action创建一个视图 选择MyLayOut作为布局页

生成的ChildPage如下 在视图中创建一个div 输入文本ChildPage

 @{
     ViewBag.Title = "ChildPage";
     Layout = "~/Views/Shared/MyLayOut.cshtml";
 }
 <lable>ChildPage</lable>

运行一下 请求default/childpage 结果如图

RenderPage方法

此方法是将一个固定的视图页面渲染到布局页中 可以在布局中多次使用 而RenderBody指向的是一个动态的视图 只能在布局中使用一次 只要A视图是引用布局页创建的  那么访问A视图 就会先加载布局页 布局页的RenderBody指的就是A视图 如果B视图也引用了布局页 那么访问B视图 也会先加载布局页 布局页RenderBody指的就是B视图

比如我们可以将菜单这种固定的视图渲染到布局中 首先我们修改一下布局页

 <html>
 <head>
     <meta name="viewport" content="width=device-width" />
     <title>MyLayOut</title>
 </head>
 <body>
     <div style="background:#ff5252;width:600px;height:250px;font:12px 微软雅黑;padding:10px;color:white;">
         <h1>布局页</h1>
         <div>
             <div style="float:left;">@RenderPage("~/Views/Default/Menu.cshtml")</div>
             <div style="float:left;margin-left:30px;background:black; width:200px;">@RenderBody()</div>
         </div>
     </div>
 </body>
 </html>

现在还没有Menu视图 创建一个Action方法Menu 为其添加视图 选择分布视图 取消勾选使用母版页或布局

 .uls1{
     margin:0;
     padding:0;
     list-style:none;
 }

 .links1{
     color:white;
     font:13px Arial;
     display:block;
     border-left:12px solid #87bbbc;
     border-right:1px solid #87bbbc;
     padding-right:2px;
     text-decoration:none;
 }

 .lis1{
     border-bottom:1px solid #b0eeef;
 }
 .links1:hover{
     background:#8fc9b8;
     border-left:12px solid white;
 }
 .deadenlink{
     background:#87bcac;
     border-left:12px solid black;
     color:white;
     font:13px Arial;
     display:block;
     border-left:12px solid black;
     border-right:1px solid #87bbbc;
     padding-right:2px;
     text-decoration:none;
 }
 .deadenlink:hover{
     background:#b0d5ef;
     border-left:12px solid #e60b39;
 }

 </style>
 <div class='navigationbox'>
     <ul class="uls1">
         <li class="lis1"><a href='#' class="links1">Google</a></li>
         <li class="lis1"><a href='#' class="links1">Microsoft</a></li>
         <li class="lis1"><a href='#' class='deadenlink'>Netscape</a></li>
         <li class="lis1"><a href='#' class="links1">W3C</a></li>
         <li class="lis1"><a href='#' class="links1">线性代数</a></li>
         <li class="lis1"><a href='#' class='deadenlink'>斯诺克</a></li>
         <li class="lis1"><a href='#' class="links1">芝宝打火机</a></li>
         <li class="lis1"><a href='#' class="links1">吴哥窟</a></li>
     </ul>
 </div>

运行一下 请求default/childpage 结果如图 可以看到布局页加载了一个固定的视图Menu 和一个动态的ChildPage视图

RenderSection方法

该方法声明了一个占位符 它会渲染指定的视图的一个部分 此方法专门用于使用了布局的各个视图 可以设置视图中某一部分的数据要显示在布局页中的某个位置上 我们知道RenderBody在布局页面中只能使用一次 而无法很灵活的将视图的某一部分定位在布局页面的某个位置 RenderSection可以解决这个问题 该方法参数1指定的是一个占位符的名字 参数2指定的是内容是否是必须的 一般设为false即可 在布局中如下使用该方法

 @RenderBody()
 <p>@RenderSection("part",false)</p>

在ChildPage视图中通过section 指定要使用的占位符名字

 @{
     ViewBag.Title = "ChildPage";
     Layout = "~/Views/Shared/MyLayOut.cshtml";
 }
 <lable>ChildPage</lable>
 @section part{
         <lable>Copyright ©2013 Tom</lable>
 }

这样 section 中的内容<lable>Copyright ©2013 Tom</lable>将显示在布局页的p标签中

MVC - 学习总目录

MVC - 布局的更多相关文章

  1. IOS 整体架构 和 MVC布局

    IOS的生态系统 IOS生态系统不仅仅是指产品,更重要的是指 iPhone/iPad/iPod/Mac +iCloud+App整个系统,包括Siri (部分设备不支持).FaceTime.Safari ...

  2. Best MVC Practices(最优的MVC布局)

    Best MVC Practices 最优的MVC布局策略 Model View Controller 1.数据层 2.视图层 3.控制器层 Although Model-View-Controlle ...

  3. ASP.NET MVC布局

    一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合 ...

  4. ASP.Net MVC 布局页 模板页 使用方法详细说明

    一.Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页 @RenderBody 当创建基于_Layout.cshtml布局页面的视图时,视图的内容会和布局页面合 ...

  5. mvc布局(一)

    negut添加Optimization @System.Web.Optimization.Styles.Render( "~/Content/styles/css/font-awesome. ...

  6. MVC布局页占位符@RenderSection("bscript", false)

    @RenderSection("bscript", false) //false表示不是必须填充 填充bscript占位符  @section bscript{}

  7. MVC之LayOut布局页

    LayOut布局页,就是相当于WebForm中母版页,实现了一个代码的共用和公共布局的作用. 布局页的使用 (1)添加新项,选择MVC布局页 <!DOCTYPE html> <htm ...

  8. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  9. 从零开始,搭建博客系统MVC5+EF6搭建框架(4)下,前后台布局实现、发布博客以及展示。

    一.博客系统进度回顾 目前已经完成了,前台展示,以及后台发布的功能,最近都在做这个,其实我在国庆的时候就可以弄完的,但是每天自己弄,突然最后国庆2天,连电脑都不想碰,所以就一直拖着,上一篇写了前端实现 ...

随机推荐

  1. Altium designer入门篇-过孔不开窗

    有没有觉得在设计PCB的时候,放的过孔开窗了,在焊接实际PCB板子的时候,会有各种锡尖,拖锡尾巴,严重的网络间短路.此经验简述了使用Altium designer软件,让过孔不开窗的设置办法.初学者可 ...

  2. linux c/c++ GDB教程详解

    学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在U ...

  3. ERP 能够做什么

    1. ERP 能解决既有物料短缺又有库存积压的库存管理难题 企业在管理库存问题上,经常处于两难之中. 要多存物料,肯定会积压资金:少存物料,又怕物料短缺,影响生产. 这样,物料的短缺和库存积压总是同时 ...

  4. bzoj2282

    到路径的距离就是到路径上的点最近的距离首先看到最大值最小不难想到二分答案下面的问题就是怎么判断,显然我们是不能穷举路径的我们要找出消防路径的性质仔细研究就会发现消防路径一定是树的直径的一段,这样必然最 ...

  5. mac book air 装win7

    1. 使用mac book air A1465中 bootCamp制作启动U盘: 需要U盘一个8G,windows 7 原版镜像ISO安装文件一个,根据bootcamp操作提示选择文件及U盘, 注意U ...

  6. struct ifconf和struct ifreq,获取网线插入状态

    这两天看用C获取当前网口的插入网线状态的程序,遇见了这两个不熟悉的结构体,看了头文件中的说明和详细. struct ifreq 这个结构定义在include/net/if.h,用来配置ip地址,激活接 ...

  7. FZU2224 An exciting GCD problem 区间gcd预处理+树状数组

    分析:(别人写的) 对于所有(l, r)区间,固定右区间,所有(li, r)一共最多只会有log个不同的gcd值, 可以nlogn预处理出所有不同的gcd区间,这样区间是nlogn个,然后对于询问离线 ...

  8. By类的使用

     举例,页面上有5个table,每个table都有标题栏和内容栏你觉的我是把每个table的标题都放到List里面遍历使用还是现指定table,在获取table的标题栏使用呢明显后面的方便不容易乱麽所 ...

  9. StringBuffer和String 的例子

    public class Example { String str = new String("good"); static StringBuffer sbf=new String ...

  10. NOIP2015 提高组(senior) 解题报告

    过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...