文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html

上一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

下一节:ASP.NET MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统

源码下载:点我下载

一、Razor简介

在解决方案资源管理器中查看Views文件夹下的文件,如下图所示。

文件的后缀名都是.cshtml。这是什么文件呢?顾名思义,cshtml = cs + html,就是一个包含C Sharp(C#)代码的HTML文件。

既然文件包含原本HTML文件里的客户端代码和C#这样的服务器端代码,我们就得想个办法区分这两种代码。这里我们就需要Razor。

Razor是什么?一个视图引擎?期待哪位专家可以给我一个高大上的定义。

在我看来,Razor就是区分服务器端代码和其它代码的一种标记语言。

二、Razor注释

为了更好的观察运行结果,这里我们禁用掉模板。打开Views文件夹下的_ViewStart.cshtml文件。注释掉其中所有代码,如下图所示。

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

从上面可以看出cshtml文件中的多行注释就是在第一行开头写@*然后最后一行结尾写*@。

Razor的单行注释也差不多这种形式,在行首写@*,行尾写*@,如下所示。

@* A one line code comment *@

三、Razor的三种基本形式

Razor通过三种标记方式来确定指定区域的代码是服务器端代码:

  • 行内(Inline)标记
  • 单行(Single Line)标记
  • 多行(Multi-Line)标记

打开Views文件夹下的First文件夹里的Index.cshtml文件。写入如下代码。图中黄色部分就是Razor标记下的服务器端C#代码

<div>
  <!--Single Line-->
  @{ var name = "Slark";}
  @{ Response.Write("Single Line : Name is" + name + "<br />");}

  <!--Inline-->
  Inline : Today is:@DateTime.Now.ToString("yyyy-MM-dd") <br />
  Inline : Name is @name <br />

  <!--Multi-Line-->
  @{
    var age = 25;
    Response.Write("Multi-Line : Age is " + age + "<br />");
  }
</div>

从上面代码中可以看出行内标记@后面可以紧跟一个已经被定义的变量或者有返回值的函数

单行标记中每一行其实就是包含了一个C#语句,用分号结尾。

多行标记就是包含了多行C#语句。

四、语句运行顺序

然后选择刚才编辑的Index.cshtml,点击菜单栏中的"在浏览器中查看",显示结果如下。

右键点击页面选择“查看源”,结果如下:

Single Line : Name isSlark
<br />
Multi-Line : Age is 25
<br />
<div>
<!--Single Line-->
<!--Inline-->
Inline : Today is:2014-12-13
  <br />
Inline : Name is Slark
  <br />
<!--Multi-Line-->
</div>

运行结果是不是和你想的不太一样呢。这个文件的执行顺序是这样的:

  • 服务器在这个文件中逐行搜寻Razor标记中的C#代码,如果读到的是C#单行或多行代码,就执行它。执行后输出的结果就是上面代码中绿色的部分。如果搜寻到了行内代码,就把这一段代码替换成代码对应的值,对应上面代码中黄色部分。这样把这个文件处理一遍之后。
  • 然后服务器会把文件中所有非Razor标记的代码写入要输出的文件,对应上面代码中蓝色和黄色部分。

五、keyword(){}特殊语法

在遇到如if、for、while等具有"keyword(){}"形式的C#代码结构时,Razor标记可以写成"@keyword(){}"这样的特殊形式。

这个不是强制性的,可以不用。下面给出两个例子作为对比。

注释掉Index.cshtml中现有的代码。添加如下代码:

@if (1 > 2)
{
Response.Write("1 > 2 <br />");
}
else
{
Response.Write("1 <= 2 <br />");
}

@for (int i = 0; i < 3; i++)
{
Response.Write(i + " <br />");
}

选择在浏览器·中查看,得到如下结果:

六、在Razor标记内写入文本

注释掉Index.cshtml原有代码,写入下面代码。

@{
var name1 = "Slark";
<p>var name2 = "Slark";</p>
@:var name3 = "Slark";<br />
<text>
var name4 = "Slark";<br />
var name5 = "Slark";
</text>
}

代码看起来是不是很奇怪?来看一下执行结果:

一般情况下,@{}中的代码只被当作C#代码运行。而上面代码中只有name1被当作C#代码处理而其他几行都被当作文本输出了。

之前的内容都是介绍怎么在html文件中嵌入服务器代码,现在来介绍怎么在服务器代码里嵌入html代码...

如上面代码中所示,一共三种方法:

  • 在Razor标记的代码中如果有成对的html标记,则这个标记及其内容会被当作普通文本输出。如上面的 <p>var name2 = "Slark";</p>
  • 在Razor标记的代码中如果有"@:",则其后的一行代码会被当作普通文本输出。如上面的 @:var name3 = "Slark";<br />
  • 在Razor标记的代码中如果有<text>...</text>标记,则其内容会被当作普通文本输出。如上面的 <text> var name4 = "Slark";<br /> var name5 = "Slark"; </text>

您的推荐和留言是我继续更新的动力,谢谢。

上一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

下一节:ASP.NET MVC5 + EF6 + Bootstrap3 (7) Bootstrap的栅格系统

ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用的更多相关文章

  1. ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

    一.创建Model MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为 ...

  2. ASP.NET MVC 5 入门教程 (4) View和ViewBag

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-view.html 上一节:ASP.NET MVC 5 入门教 ...

  3. MVC5+EF6入门教程——实现动态创建数据库与登录验证

    详细步骤 创建文件夹,规划好项目目录 创建相关实体类 (Data Model) 创建 Database Context 创建Initializer, 使用EF初始化数据库,插入测试数据 实现数据库登录 ...

  4. View中的Razor使用

    View中的Razor使用   上一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 源码下载:点我下载 一.Razor简介 在解决方案资源管理 ...

  5. ASP.NET MVC 5 入门教程 (3) 路由route

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-route.html 上一节:ASP.NET MVC 5 入门 ...

  6. MVC5 + EF6 入门完整教程二

    从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛弃了WebForm的一些特有的习惯,例如服务器端控件,Vie ...

  7. MVC5+EF6 入门完整教程12--灵活控制Action权限

    大家久等了. 本篇专题主要讲述MVC中的权限方案. 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一. 前面的系列文章中我们用到了 SysUser, SysRole, SysUserR ...

  8. MVC5 + EF6 入门完整教程1

    https://www.cnblogs.com/miro/p/4030622.html 第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定& ...

  9. MVC5 + EF6 入门完整教程(转载)--01

    MVC5 + EF6 入门完整教程   第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定". 直接讲这些 "约定&qu ...

随机推荐

  1. Python基本数据结构-集合-创建/与其他类型比较

  2. 怎么直接让火狐输入json数据,而不是弹出文件保存对话框?

    一.问题再现: 我需要浏览器输出的是json数据,但是浏览器弹出的是一个文件保存的对话框,这样的体验有点差.所以想怎么让浏览器直接输出到浏览器的页面上面,并且格式的输出,还可以编辑. 测试数据: ht ...

  3. mysql、sql server、oracle数据库分页查询及分析(操作手册)

    1.mysql分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实 ...

  4. R语言中数据框的横向合并与纵向合并

    #横向合并ID<-c(1,2,3,4)name<-c("Jim","Tony","Lisa","Tom")s ...

  5. multiprocessing module in python(转)

    序.multiprocessing python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包mu ...

  6. Beeline known issues

    If you use nohup myscript.sh , You beeline scripts may not work, Pay attention to this in your job.

  7. [转]设定version 更新js缓存

    http://zhenggm.iteye.com/blog/680600 遇到的问题:         在访问量比较大的系统中,我们需要将一些静态的文件在客户端缓存,以减少下载的流量,从而加快客户端访 ...

  8. linux下安装+配置+卸载jdk

    一. 解压安装jdk在shell终端下进入jdk1.7.0_55.bin文件所在目录, 执行命令 ./jdk1.7.0_55.bin 这时会出现一段协议,连继敲回车,当询问是否同意的时候,输入yes, ...

  9. 边工作边刷题:70天一遍leetcode: day 75

    Group Shifted Strings 要点:开始就想到了string之间前后字符diff要相同. 思维混乱的地方:和某个string的diff之间是没有关系的.所以和单个string是否在那个点 ...

  10. [转载]ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)     本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事 ...