View中的Razor使用

 

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

源码下载:点我下载

一、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

 
分类: MVC
标签: MVC, ASP.NET

View中的Razor使用的更多相关文章

  1. ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用

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

  2. [asp.net mvc 奇淫巧技] 01 - 封装上下文 - 在View中获取自定义的上下文

    我们在asp.net 开发中已经封装了最强大的HttpContext,我们可以在HttpContext中可以获取到几乎任何想获取的东西,也可以在HttpContext写入需要返回客户端的信息.但是这些 ...

  3. ASP.NET Core中使用Razor视图引擎渲染视图为字符串

    一.前言 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了模型到视 ...

  4. 总结ASP.NET MVC Web Application中将数据显示到View中的几种方式

    当我们用ASP.NET MVC开发Web应用程序的时候,我们都是将需要呈现的数据通过"Controllers"传输到"View"当中,怎么去实现,下面我介绍一下 ...

  5. ASP.NET Core中使用Razor视图引擎渲染视图为字符串(转)

    一.视图渲染说明 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了 ...

  6. ASP.NET Core 中的 Razor 页面介绍

    标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...

  7. ASP.NET Core 中的SEO优化(2):中间件中渲染Razor视图

    前言 上一篇文章<ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存>中介绍了中间件的使用方法.以及使用中间件实现服务端静态化缓存的功能.本系列文章的这些技巧都是我 ...

  8. 【翻译】介绍 ASP.NET Core 中的 Razor Pages

    介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core         译文地址:介绍 asp. ...

  9. Core中使用Razor视图引擎渲染视图为字符串 阅读目录

    Core中使用Razor视图引擎渲染视图为字符串 } <!DOCTYPE html> <html> <head> <title>Render view ...

随机推荐

  1. Struts2 + uploadify 多文件上传完整的例子!

    首先,我这里使用的是  Jquery  Uploadify3.2版本号  导入相关的CSS  JS    <link rel="stylesheet" type=" ...

  2. html分析器——jericho-html-3.3分解table

    原部分来自Internet上的其他博客,只是因为很长一段时间.忘了谁是参考,这里说声抱歉.. 先贴一些html页: <html> <head> <meta http-eq ...

  3. 为网站添加IE6升级提示

    原文 为网站添加IE6升级提示 IE6的是一款横跨十年的浏览器,作为一枚前端,对其已经失望透顶,但其在中国的市场比仍旧很高,中国大量的PC上安装的都是盗版Windows XP,而Windows XP上 ...

  4. 看德日进,凯文·凯利与Kurzweil老师?

    生命从哪里来.要到那里去.生命存在的意义是什么.这些差点儿是人类可以探究的最深层次问题.基督教给出的答案是毁灭和审判.佛学给出的答案是无常,科学的达尔文进化论给出了生命的起点和进化的过程,对于未来.达 ...

  5. EL表达式语言

    EL (Expression Language) 目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ...

  6. 使用requirejs实现模块化编程

    > 序言 - -# 公司大了,业务多了,前端代码量也逐渐增大,我们渐渐的依赖js实现的交互越来越多,长期以来会导致我们的代码维护越来越困难,所以依赖的插件也越来越多..比如这样页面中有大量的js ...

  7. 使用Hadoop的MapReduce与HDFS处理数据

    hadoop是一个分布式的基础架构,利用分布式实现高效的计算与储存,最核心的设计在于HDFS与MapReduce,HDFS提供了大量数据的存储,mapReduce提供了大量数据计算的实现,通过Java ...

  8. AngularJS html5Mode与ASP.NET MVC路由共存

    前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门做一个OA系统(想省下几万大洋的费用),第一时间便想到AngularJS ...

  9. Cocos2d-x v3.0 正式版 如何创建一个项目,TestCpp执行

    欢迎增加 Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24456579 首先到 ...

  10. Redis集群环境安装指南

    环境 RHLinux-6.4-64-EN, 红帽6.4 64位,英文正式公布版. Redis3.0.0 redis2.x版本号还不支持集群,3.0版本号将会支持,如今3.0版本号还在开发中,如今是be ...