Razor 是MVC框架视图引擎的名称。

    本章提供 Razor 语法的快速教程,以使你能够识别 Razor 表达式。

    本章不打算提供 Razor 的完整参考,而将其视为一个语法速成教程。在本书的后续内容中,将随着 MVC 框架的其他特性深入考察 Razor 。

5.1 准备示例项目

    使用 “ASP.NET MVC Web Application” 模板创建一个名称为 “Razor” 的新项目。(这里选择 “空” 选项,勾选 “MVC” 复选框)

  5.1.1 定义模型

    本小节打算从一个名称为 Product 的简单域模型开始,其定义(略)放在名称为 Product.cs 的类文件中。

  5.1.2 定义控制器

    本小节打算遵循 MVC 框架的约定,并定义一个名称为 Home 的控制器作为项目的起始点。

    (该控制器中创建了一个 Product 对象,并对其属性进行填充,同时还定义了一个叫做 Index 的动作方法,在其中将 Product 对象传递给了 View 方法,以便在渲染视图时使用它)

    (在调用 View 方法时,并未指定视图文件的名称,因此,这将会使用该动作的默认视图)

  5.1.3 创建视图

    右击 Index 方法,选择“添加视图”,确保名称为 “Index”,将“模板”设置为 “空”,模型类选择 “Product”。(如果没有找到“Product”选项,请编译该项目并重复上述步骤)

    去掉已勾选的 “试图选项” 复选框,单击 “添加” 按钮。

以下小节将概览 Razor 视图的各个方面,并演示可以在其中所做的一些不同操作。

    在学习 Razor 时要意识到,视图的目标是将模型的一个或多个部分表现给用户。

    记住这一点是有好处的,而且这也意味着,视图会生成显示数据的 HTML,这些数据来自于视图所接收的一个或多个对象。

    如果你总能记住 “这是在建立一个能够发送给客户端的 HTML 页面”,那么,Razor 所做的一切事情就变得有意义了。

5.2 使用模型对象

    Razor 语句以 @ 字符开始。

    @model 语句声明了通过动作方法传递给该视图模型对象的类型,这让我们能够通过 @Model 来引用视图模型对象的方法、字段和属性。

    (声明视图模型对象的类型使用了小写的 m,而引用数据时使用的是大写的 M)

    通过使用 @model 表达式,便是在告诉 MVC 将在视图中使用的是哪种类型的对象。

5.3 使用布局

    Razor 代码块允许在视图中包含 C# 语句。(这种代码块以 “@{” 开始,以 “}” 结束,而其中的语句会在视图被渲染时执行)

    正如第 20 章将要解释的那样,在一个 MVC 应用程序中,Razor 视图会被编译成 C# 类,而所用的基类定义了 Layout 属性。

    将 Layout 属性设置为 null 的效果是告诉 MVC 框架,该视图是自包含的,并且会渲染客户端所需要的全部内容。

    自包含视图十分适用于简单示例应用程序,但一个实际项目可能会有数十个视图。布局是十分有效的模板,它含有用以创建应用程序一致性的标记 —— 这能够确保在结果中包含适当的 JavaScrit 库。

  5.3.1 创建布局

    右击 Views 文件夹,选择 “添加”、“新建项”,选择 “MVC 5 布局页(Razor)”模板

    将文件名设置为 _BasicLayout.cshtml,并单击 “添加” 按钮。

    注:Views 文件夹中以画线 “_” 打头的文件是不会被返回给用户的,它允许通过文件名来区分要进行渲染的视图和对视图进行支持的文件。布局是支持文件,故以下划线为前缀。

    布局是特殊形式的视图。

    对 @RenderBody 方法的调用会将动作方法所指定的视图内容插入到布局标记之中。

    布局中的另一个 Razor 表达式会在 ViewBag 中查找一个叫做 Title 的属性,目的是设置 title 元素的内容。

    布局中的元素会被运用于使用此布局的任何视图,而这正是使用布局为基本模板的原因。

  5.3.2 运用布局

    为了将布局运用于视图,只需要设置 Layout 属性的值即可。

    布局中包含了一些 HTML 元素,这些元素定义了对浏览器进行相应时的 HTML 页面的结构。(因此可以将视图中原来的这些元素去掉)

    简化后的 Index.cshtml 文件:

        @model Razor(项目名称).Model.Product

        @{

          ViewBag.Title = "产品名称";

          Layout = "~/ Views / _BasicLayout.cshtml";

        }

        产品名称:@Model.Name

    这种转换不仅让笔者简化了标记,还意味着不必在每一个创建的视图中重复那些通用元素。

  5.3.3 使用视图起始文件

    笔者还有一个小问题要解决,就是必须在每一个视图都要指定布局文件。—— 这意味着,如果需要重命名布局文件,那么必须找出引用该布局的每一个视图,并进行修改。(这将是一个易错的过程,而且这与贯穿于 MVC 框架的易维护主题是相悖的)

    通过使用视图起始文件可以解决这个问题。—— 在渲染一个视图时,MVC 框架会查找一个叫做 _ViewStart.cshtml 的文件。框架会将此文件的内容视为视图文件的一部分,于是笔者可以使用这一特性为 Layout 属性自动第设置一个值。

    为了创建一个视图起始文件,可以对 Views 文件夹添加一个新的布局文件,并将该文件的名称设置为 _ViewStart.cshtml(再次注意前面的下画线)。编辑文件内容为:

        @{

          Layout = "~/ Views / _BasicLayout.cshtml";

        }

    此视图起始文件含有 Layout 属性的值,这意味着可以去除 Index.cshtml 文件中的相应语句。

    笔者不必以任何方式指定希望使用的视图起始文件,MVC 框架会对此文件进行定位,并自动第使用其内容。

    在视图文件中对 Layout 属性值所做的定义具有更高的优先级,这便于对视图起始文件进行覆盖。—— 意即,若在视图中重新定义了 Layout 的值,会覆盖视图起始文件中所指定的布局。

    要理解忽略视图文件的 Layout 属性与将其设置为 null 两者之间的差别。—— 如果视图是自包含的,并且不想使用布局,那么将 Layout 属性设置为 null。如果忽略 Layout 属性,那么 MVC 框架将假设你确实想用一个布局,而且它应该使用视图起始文件中所找到的那个值。

  5.3.4 使用共享布局

    添加动作方法并创建视图。—— 将“模板”设置为 “空”,选择 “模型类”,并确保勾选了 “使用布局页面” 复选框。

    如果你希望使用在视图起始文件中指定的视图,则应让文本框为空。

    如果打算明确地指定布局视图,可以单击文本框右侧的省略号按钮。

5.4 使用 Razor 表达式

第5章——使用 Razor(MVC框架视图引擎)的更多相关文章

  1. 2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

    今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率 ...

  2. MVC ViewEngine视图引擎解读及autofac的IOC运用实践

    MVC 三大特色  Model.View.Control ,这次咱们讲视图引擎ViewEngine 1.首先看看IViewEngine接口的定义 namespace System.Web.Mvc { ...

  3. ASP.NET MVC 对于视图引擎的优化

    我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...

  4. ASP.NET MVC自定义视图引擎ViewEngine 创建Model的专属视图

    MVC内置的视图引擎有WebForm view engine和Razor view engine,当然也可以自定义视图引擎ViewEngine. 本文想针对某个Model,自定义该Model的专属视图 ...

  5. MVC自定义视图引擎地址

    先看结构 1.RouteConfig 文件(注意顺序) public static void RegisterRoutes(RouteCollection routes) { routes.Ignor ...

  6. ASP.NET MVC——Razor视图引擎

    Razor是MVC框架视图引擎,我们今天就来说一说Razor视图引擎. 首先还是来创建一个基础项目叫Razor来演示. 先来定义一个Model叫Product public class Product ...

  7. ASP.NET MVC 5 Web编程4 -- Razor视图引擎

    Razor简介 Razor是ASP.NET新增的一个视图引擎,由微软全球最年轻的副总裁,有着"ASP.NET之父"称呼的Scott Guthrie主导的团队开发. 主导Razor开 ...

  8. Pro ASP.NET MVC –第二章 第一个MVC程序

    学习一个软件开发框架的最有效的方式就是了解并使用它.在本章,你将会创建一个简单基于ASP.NET MVC Framework的数据-实体应用程序.我们会该程序划分成若干小块,每次介绍一个部分,以便你能 ...

  9. Razor视图引擎 语法学习(一)

    ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架: ASP.NET约定优于配置:基本分为模型(对实体数据 ...

随机推荐

  1. strcpy、memcpy和memset的区别

    strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NULL结束的字 ...

  2. 【JAVASCRIPT】获取触发MESSAGE事件的源IFRAME

    先让发送源获取焦点,然后获取焦点元素. window.addEventListener('message',function(msg){ //做一些事来判断是不是某个iframe发送的消息 msg.s ...

  3. trace

    linux 下程序的系统调用和信号调用跟踪工具 http://www.cnblogs.com/qingquan/archive/2011/07/18/2110072.html

  4. WebSocket协议详解

    转自 http://www.cnblogs.com/lizhenghn/p/5155933.html 1. websocket 是什么 websocket 是html5提出的一个协议规范,参考rfc6 ...

  5. mysql 批处理文件出错后继续执行

    在升级批处理sql脚本的时候,由于各种编写的不规范.不可重复执行,我们通常希望在sql脚本出错后不中止,而是执行完成.虽然这些问题可通过编写可重复执行的mysql存储过程比如add_column/dr ...

  6. 20145303刘俊谦 Exp8 Web基础

    20145303刘俊谦 Exp8 Web基础 基础问题回答 1.什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素,表单 ...

  7. 格式化输出%与format

    一.%的用法 1.1整数输出 %o —— oct 八进制 : %d —— dec 十进制 : %x —— hex 十六进制 >>> print('%o' % 20) 24 >& ...

  8. LightOJ - 1247 Matrix Game (Nim博弈)题解

    题意: 给一个矩阵,每一次一个玩家可以从任意一行中选任意数量的格子并从中拿石头(但最后总数要大于等于1),问你谁赢 思路: 一开始以为只能一行拿一个... 将每一行石子数相加就转化为经典的Nim博弈 ...

  9. Win7上安装WMware虚拟机和Ubuntu操作系统

    效果图: 问题拾遗: 一.如何划分一个新硬盘空间? 参考链接:如何新建磁盘空间 效果图: 我划分了20G的内存空间给Ubuntu的硬盘空间.一般来说15G就够用了. 二.VMware上拷贝Ubuntu ...

  10. 07_Flume_regex interceptor实践

    实践一:regex filter interceptor 1.目标场景 regex filter interceptor的作用: 1)将event body的内容和配置中指定的正则表达式进行匹配2)如 ...