一步步学习ASP.NET MVC3 (4)——Razor(2)
请注明转载地址:http://www.cnblogs.com/arhat
在上一章,我们介绍了Razor的一些基本语法,从Razor中我们可以出ASP.NET MVC的视图引擎给我们带来的便利,但是同时,先前我们都是在使用ASP.NET,其中ASP.NET中的母版页(MasterPage)非常的强大,那么在MVC中,也提供了类似的功能,但灵活性上我认为比ASP.NET的母版页要强大的多(个人认为哦)。
首先我们先创建一个项目“Com.ArHat.Web”的MVC项目。当我们创建完成之后,打开Views文件,会发现一个文件”_ViewStart.cshtml”。 
这个文件对于视图而言是非常重要的,因为在Razor中,任何的视图文件在被加载之前都必须先加载“_ViewStart.cshtml“。下面我们看看”_ViewStart.cshtml”的内容。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
这个文件中包含了一行指定”Layout“属性的代码,所代表的意思是,所有Views文件夹下的view文件都要使用”/Views/Shared/_Layout.cshtml“这个模板文件。
而Views/Shared下的_Layout.cshtml文件就是模板文件,下面我们看看这文件的内容:
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
</head>
<body>
@RenderBody()
</body>
</html>
这个文件中出现了一个Razor语法”@RenderBody()”,这个就是所谓的”占位“,我们也称之为”挖洞“。@RenderBody在Razor模板页中,也就是View页在没有特别声明的情况下,所有的内容都会被填充到@RenderBody这个位置。下面我们来实验一下。
建立一个HomeController,并建立一个视图文件Index.cshtml。打开Index.cshtml文件,把里面的所有的文件都删除,只写入一句话”我会被加入到母版页中吗?“。然后运行程序,我们看到预览的结果,在浏览器中的确出现了”我会被加入到母版页中吗?“。我们查看一下源代码,你发现了什么? 
对,出现了模板中预设的内容。而@RenderBody()也消失了,被”我会被加入到母版页中吗?“所代替了。感觉是不是挺简单的?在Index.cshtml加载之前,会检查”_ViewStart.cshtml“文件,然后根据”_ViewStart.csthml“文件中指定的Layout文件进行加载模板页面。
好了,到此你可能认为好是好,但是这样岂不是所有的页面都要使用同一个模板了吗?答案肯定是否定的,那么怎么才能使用多个页面呢?这个”_ViewStart.cshtml“文件不仅能在Views文件下,还能在任何与Controller同名的Views子目录下也都能出现此文件。如此一来,就可以让不同的Controller载入不同的模板页面。在运行的时候,如果发现子目录中有此文件,则不再执行Views下的这个文件。如图,我们在HomeController对应的Views目录下新增一个”_ViewStart.cshtml“文件。

那么我们在Shared目下新建一个”_LayoutA.cshtml“文件。并修改其内容如下:
<body>
我是HomeController中Index视图文件的模板哦!
<br />
@RenderBody()
</body>
同时修改Home文件下的”_ViewStart.cshtml“的内容,Layout属性指向”_LayoutA.cshtml“文件。
@{
Layout = "~/Views/Shared/_LayoutA.cshtml";
}
然后运行,我们会看到浏览器的结果。 
同时我们查看一下源代码:

我们会发现,此时的Index.cshtml文件并没有加载默认的”_Layout.cshtml”文件。同样的方法可以使不同的View加载不同的模板文件。
在模板页中,除了有@RenderBody(),还有一个非常重要并且灵活的Razor指令:@RenderSection。这个@RenderSection在Razor中可以被认为是区域性占位,并且这个区域是有名字的。以西面语法为例,我们在_LayoutA.cshtml中定义一个@RenderSection。内容如下:
<body>
@RenderSection("sectionA",false)
我是HomeController中Index视图文件的模板哦!
<br />
@RenderBody()
</body>
这个@RenderSection有两个参数,第一个参数是给这个区域声明一个名字,第二个参数是这个区域是不是必须填充,如果设置为true,则在视图文件中必须实现这个区域,如果为false,则可以不用。然后我们修改一下Index.cshtml文件,内容如下:
@section sectionA{
<h3>这里是局部的内容哦!</h3>
<br />
}
<br />
我会被加入到母版页中吗?
在Index.cshtml文件中,我们写了一个@section指令,指令后面就是在母版页中声明的区域的名字,而{}就是一个代码块,所套用的Razor规则也是一样的。
当然,一个模板页中可有多个@RenderSection。好了,我们来看一下预览的效果。

内容的确是正确的,然后我们再看看源代码。

的确按照我们的设想正确输出了。好了,本章先介绍到这里,在下一篇中,我们主要讲解一下View如何获得Action提供的数据。有了数据,那么我们能做的事就更多了。
一步步学习ASP.NET MVC3 (4)——Razor(2)的更多相关文章
- 一步步学习ASP.NET MVC3 (3)——Razor(1)
请注明转载地址:http://www.cnblogs.com/arhat 首先这个<一步步学习ASP.NET MVC3>前段时间有些忙,没有顾得上写文章,昨天呢写了3个和ASP.NET的相 ...
- 一步步学习ASP.NET MVC3 章节总结
请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...
- 一步步学习ASP.NET MVC3 (1)——基础知识
请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...
- 一步步学习ASP.NET MVC3 (12)——FileResult
请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...
- 一步步学习ASP.NET MVC3 (2)——入门程序
请注明转载地址:http://www.cnblogs.com/arhat 在上一节中,我们只是简单的介绍了什么是MVC及MVC的运行原理.而本节呢,主要来实现下一ASP.NET MVC3的开发流程,并 ...
- 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...
- 一步步学习ASP.NET MVC3 (6)——@helper,@functions
请注明转载地址:http://www.cnblogs.com/arhat 在前一章中,我们讲述了View如何从Action中获得数据,并显示出来,但随着需求的变化,我们可能要对View中显示的数据作出 ...
- 一步步学习ASP.NET MVC3 (14)——Route路由
请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...
- 一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult
请注明转载地址:http://www.cnblogs.com/arhat 前面几章我们讲解的都是关于View方面的知识,虽然还有很多关于View的知识没有讲,但是没关系,我们在后面使用到的时候在讲解, ...
随机推荐
- IIS 之 查看并发连接数
如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数.然而,“网站统计”的当前在线人数统计时间较长,一般为10分钟或15分钟,再加上统 ...
- 快递查询API接口对接方法
各类接口 快递查询API有即时查询和订阅查询两种,即时是请求即返回数据,订阅则是订阅快递单号到接口,有物流轨迹更新则全量返回数据.目前常用的有快递鸟.快递100.快递网等. 快递鸟即时API可以查询3 ...
- Service的启动与停止、绑定与解绑
---恢复内容开始--- Service的意义就在于当软件停止之后还可以在背景中进行运行,换句话也就是说,比如一个音乐播放器,当我们退出音乐播放器的时候,还是希望它在背景中运行,也就是一直播放着音乐, ...
- Create RCU
BI创建(数据)分析.仪表盘.报表前,都需要对数据进行建模,在oracle biee里称为创建“资料档案库”-该文件后缀为RPD,所以一般也称为创建RPD文件. 步骤: 1.从windows开始菜单里 ...
- div嵌套内层div的margin-top转移给外层div的解决办法
在web开发过程中,有些情况下给内层div设置的margin却被莫名奇妙的转移给了外层div.百度之后,发现它竟然是css2.1中盒模型中规定的内容: In this specification, t ...
- adb uninstall卸载apk 命令后跟的是包的名称
昨天在使用adb卸载程序,结果死活卸载不了.我输入的命令和系统提示如下: arthur@arthur-laptop:~$ adb uninstall com.hase.bclm.client-2.ap ...
- 关于sql row_number,rank,dense_rank,ntile函数
row_number排序最好用它,它依次排名,不出现相同名次,如:1,2,3,4,5 rank出现相同排名,且跳过相同的排名号排下一名,如:1,1,3,4,5, dense_rank出现相同排名,不跳 ...
- 利用openssl进行RSA加密解密
openssl是一个功能强大的工具包,它集成了众多密码算法及实用工具.我们即可以利用它提供的命令台工具生成密钥.证书来加密解密文件,也可以在利用其提供的API接口在代码中对传输信息进行加密. RSA是 ...
- MBR与分区表备份与恢复
常用工具列表 dd 数据复制,转换实用工具 tar GNU磁盘存档实用工具 cpio 数据存档实用工 ...
- 关于Masonry框架(AutoLayout)的用法--面向初学者
Masonry作为目前较为流行的自动布局第三方框架,简单易用,大大减少了程序员花在UI布局和屏幕适配的精力与时间. 1 基本用法 1.1 事例1: 图1-1 // 首先是view1自动布局 [view ...