上篇博文介绍了一下Razor的基本语法,那今天看下Razor视图怎么布局吧!

Question 网站为啥要布局?

说道布局了那么网站为什么要布局呢?不布局有什么坏处呢?好今天开始咱先说一下为什么要布局?

首先,没有使用布局时,每个页面都存在大量的重复代码比如head top logo menu bottom 等等。

缺点:
1. 代码冗余      ---> 刚才已经提到了,没有使用布局的网站没个页面中必须再把比如logo head menu 等等从新copy一份,有人说我用iframe或者是include标记,我说当然可以,但是从开发规范上来看我觉得要避免使用浮动框架。
2. 不利于管理   ---> 您站点的每个文件都是单独的一个文件而没有统一的管理页面(布局页面)当然不利于管理。
3. 不利于后期修改 ---> 比如说哪天客户需求变了,我logo看着太小我要改大点,这下完蛋了 -- 坑爹啊 每个页面都得改。

那问题来了怎么解决呢?
   传统的webfrom中有母板页的概念大家应该都知道吧?如有不知道的,而且至今还用frame做模板布局的快学习.net的母板吧!这比 比如iframe什么的方便多了。因为我以前就是在.net里运用iframe 惭愧惭愧 嘿嘿!!!

今天的重点:Razor 布局 : 用过MVC 2 的应该知道那里面用的是master 母板页布局,那么MVC 3 中的布局是布局页(Layout)其实大同小异换瓶不换药

Razor的布局

1.不需要使用专门的.master文件,而统一使用.cshtml文件(view层中的文件都是.cshtml文件)
   布局文件名一般采用类似于_Layout.cshtml的名字。细心的人看到了是下划线开头,MVC 3会限制以下划线开头的文件直接被用户访问,即此文件只能在程序中调用而不能直接被用户访问到,处于安全的考虑。

2. 布局文件中使用到的特殊标记
   2.1 @RenderBody() 用于标识布局页中科替换内容的主体部分。
   2.2 Layout属性:内容页总通过给页面的Layout属性赋值实现指定布局页的文件路径。

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

  2.3 @RenderSection在布局页中预设一些区域,用于在内容也中使用。
     如:布局时head标签中的东西不能确定,或者说其他的页面中需要一些不是公共的东西,如css文件,js文件等等那么就需要在布局页的head标签中加入如下代码了  @RenderSection("head",false)

     2.3.1 第一个参数是Section的名字。
     2.3.2 第二个参数是用来设定是否为必须填充内容的区域。
     内容也中通过@section head { ... } 的方式向名为head的section中填充内容。

3. _ViewStart 文件


     我们发现在项目的试图文件夹下有个名为_ViewStart.cshtml 的文件那这个文件是干啥的呢?该文件用来定义想要在每次视图呈现开始时执行的通用试图代码,就是你每访问一个试图页面之前先调用这个文件执行这个文件中的代码然后在执行您所访问的视图页面。比如我们可以将上面的每个视图指定Layout属性的代码写在这里面。

      怎么样只需要写一次,每个视图了就不需要在写了,如如某个页面的布局和_ViewStart文件中的布局不一样怎么办呢?好办直接在视图里写对于的布局文件即可它会默认覆盖共有的布局文件。那么如果我有好多页面都需要一个不同的布局页并且它们在同一个文件夹(比如网站后台admin)下那怎么办呢?难不成要每个视图都要知道Layout属性吗?不会滴 。 先说下_ViewStart文件的作用范围:它的同级文件已经同级的子文件。所以针对上面的需求只需要在admin文件中新建一个_ViewStart文件然后在文件中指定Layout属性就OK了。

 

 

 posted on 2012-05-27 19:36  WlitSoft  阅读(10838)  评论(4编辑  收藏  举报