之前体验过razor视图引擎@符号的威力了吧~

连我这个初学者都能感觉到确实省时省力方便快捷

简直就是居家旅行*人*货必备之物啊(这里和谐两个字~)

那么现在就开始对razor的语法进一步介绍~

1.C#语句块

这个就不用说了吧~

@{代码}

大括号之间写C#代码

关键是还能在C#代码之间直接穿插html标签

这是razor的一大特点

但是它是怎么识别的呢

是根据html标签?

还是<尖括号?

我们可以来做个小测试

在Home控制器中添加一个名为RazorTest的action方法,并添加视图(还是不选母版页)

在cshtml中代码如下:

<body>
@{
for (int i = 0; i < 5; i++)
{
<div>~~~~</div>
}
}
</body>

生成请求RazorTest,结果如下:

好的,这个肯定没问题

那如果代码变成这个样子呢?

<body>
@{
for (int i = 0; i < 5; i++)
{
<JChubby>~~~~</JChubby>
}
}
</body>

JChubby肯定不是html标签(自己发明的标签~)

那么会出现什么情况呢?

走一个看看呗

这时候直接看页面可能不是很直观,所以我们去查看源代码

很神奇吧?它直接把JChubby当做html标签输出给浏览器了

这说明了什么??

说明了razor跟html标签根本就不熟嘛!

它只认识<尖括号~!

2.输出Email格式的数据

因为@符号是razor的关键字

那么要怎么在视图中输出带@符号的email邮箱格式的数据呢

其实很简单

来看看下面几行代码

<!--邮箱格式的数据-->
<div>JChubby@qq.com</div>
<!--输出的是JChubby+变量qq.com-->
<div>JChubby @qq.com</div>

有发现什么地方不一样吗?

没错

就是一个空格的关系

如果在一个字符串之后紧跟着@符号,那么razor解析的时候不会将其当做关键字处理,直接作为一个字符串整体

如果字符串之后隔了一个空格才有@,那么此时@就是关键字的作用

3.输出字符串

假设已定义了一个变量str="111";

那么

(1)@str

(2)@{Response.Write(str);}

两种方式效果相同

4.输出html字符串

有时候我们想自己拼一个html字符串然后在前台输出展示

比如:string strHtml=”<input type='text'/>“;

但是如果直接用@strHtml输出的话

razor在其中自动对<尖括号进行转义

导致最后结果如下:

这很明显不是我们要的效果,现在需要的是一个文本框

那么怎么才能让razor不进行自动转义呢?

(1)使用Response.Write输出 html

但是缺点是 ResponseWrite的内容 都在页面最上面

(2)使用HtmlString 输出不转义的html

如:

HtmlString strHtml = new HtmlString("<input type='text'/>");

@strHtml

这样就可以达到我们的要求

因为razor对HtmlString类型的数据不作处理

(3)使用Html.Raw方法 输出不转义的html

如:

string strHtml = "<input type='text'/>";

        @Html.Raw(strHtml)

这种方式的效果同上

因为Raw方法会返回 一个 HtmlString 对象

(4)使用MVCHtmlString静态方法Create

如:

HtmlString strHtml = MvcHtmlString.Create("<input type='text'/>");

输出不转义的html

5.在视图中定义方法

在视图中定义一个方法是有着固定格式的

如下:

@helper Text(string a)

{

  Response.Write(a);

}

必须是helper为开头,并且返回值也是固定的HelperResult类型的数据

其实直接在视图中定义方法是很少用到的

因为方法其实就是执行业务逻辑

mvc的目的就是为了让视图和业务逻辑分开

之所以razor支持在视图中定义方法是因为可能会有大量的重复需要的html代码需要输出的情况

所以可以通过定义方法的方式来实现html代码复用

6.在视图中使用方法需要注意的地方

(1)调用无返回值的方法

在视图中 调用 无返回值 方法,必须要加上大括号

比如现在有一个无返回值的方法VoidText

在视图中调用时

@{VoidText();}

(2)调用有返回值的方法

直接使用@Test()

调用Test方法(有返回值)

并直接将返回值输出

(3)调用泛型方法

因为在C#中使用泛型方法要用到<>尖括号

所以又涉及到razor对<>尖括号解析的问题

so

在调用泛型方法的时候也要用{}大括号包起来

7.注释

(1)

@*我是多行注释哈哈哈!!!*@

(2)

@{
//我是单行注释哈哈哈!!!
}

8.在C#代码中输出文本

注意哦~

这里的文本跟之前的输出字符串可不一样~

之前是输出字符串变量

这里讨论的是直接将文本输出

(1)使用razor内置的标签<text>输出的文字~~<text/>

(2)@:输出的文字~~~

9.使用@@两个符号最后输出的效果是@

但是现在是不是还有点疑问?

razor试图引擎到底是怎么编译解析视图的?

Reflector可以告诉我们答案(这可是神器呀!)

我们在页面中写上面的代码,作用是输出编译后的程序集位置

将程序集所在的路径复制,然后在文件管理器地址栏中黏贴,找到该程序集,拖入Reflector中(注意,这个程序集每次生成之后的名字都是不一样的)

现在看到的就是4个编译之后的前台视图类了

随便点开一个(这里是Index)

为了方便看清楚将代码截到画图面板中

与编译之前的视图源码相比较

是不是可以发现点什么东西~?

没错

前台类会通过一个Excute方法将页面中的所有代码输出成html字符串

只不过针对C#代码和html代码做了不同的处理

这通过也解释了为什么在视图中定义方法要使用@helper开头而不能像正常C#那样定义方法

因为方法之中(Excute)怎么能在定义方法呢!

ok,基本搞定~

razor视图引擎常用的语法大概就是上面提到的几种

如果有什么遗漏或者不同理解的地方欢迎补充~~

ASP.NET MVC学习---(七)Razor视图引擎语法的更多相关文章

  1. ASP.Net MVC(3) 之Razor视图引擎的基础语法

    Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...

  2. ASP.NET MVC3 系列教程 - Razor视图引擎基础语法

    http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...

  3. Razor视图引擎语法

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

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

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

  5. Razor视图引擎 语法学习(二)

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

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

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

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

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

  8. Razor视图引擎 语法学习

    下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法.1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后: 2.页面中的C#或者VB代码都放在大括号中.运行后: 3. ...

  9. ASP.NET MVC 4 中Razor 视图中JS无法调试

    解决方法 1.首先检查IE中这2个属性是否勾选了. 2.选择IE浏览器进行调试,调试方法有2种     A:采用debugger;的方法,如下图所示: 这时不用调试断点就会在debugger位置中命中 ...

随机推荐

  1. BZOJ4031 [HEOI2015]小Z的房间 【矩阵树定理 + 高斯消元】

    题目链接 BZOJ4031 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模\(10^9\)是什么鬼嘛QAQ 想尝试递归求行列式,发现这是\(O(n!)\)的.. 想上高斯消元,却又处理不了逆元这个 ...

  2. Eclipse 日文乱码怎么解决Shift_JIS

    https://jingyan.baidu.com/article/870c6fc325a691b03fe4beac.html Eclipse设置编码的地方主要有三处,这三处的设置都会影响中文的显示. ...

  3. 如何得到一个接口所有的实现类(及子接口)?例如:Eclipse IDE

    (一)Eclipse IDE的做法 它会解析所有的Java文件.Class文件. 技巧:在Eclipse中,选中Interface,按下F4,就可以查看到所有的实现类及子接口. 例如: (二)自己怎么 ...

  4. Codeforces Round #504:D. Array Restoration

    D. Array Restoration 题目链接:https://codeforces.com/contest/1023/problem/D 题意: 给出一个序列,现在要求对一个全为0的序列执行q次 ...

  5. 洛谷 P2715 约数和

    给出a和b求a^b的约数和. 题目描述 输入输出格式 输入格式: 一行两个数a,b. 输出格式: 一个数表示结果对 9901 的模. 输入输出样例 输入样例#1: 2 3 输出样例#1: 15 说明 ...

  6. ViewPager实现选项卡功能

    1.ViewPager实现Tab 目录结构:

  7. 【原创】SQL SERVER 2008 R2安装(多图详解)

    配置系统环境说明 操作系统:Windows 7 操作系统版本:旗舰版 SP1 操作系统位数:x64 注:其它系统配置也基本相似,只是可能菜单的名字或者所处位置不一样,具体的配置如有不同,请自行搜索 安 ...

  8. asp.net如何更改默认的登陆帐号/密码:16aspx/16aspx

    修改数据库,在DB_16aspx文件夹下面 sql server 2005+的数据库打开.

  9. 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)F 猴子排序的期望【Java/高精度/组合数学+概率论】

    链接:https://www.nowcoder.com/acm/contest/116/F 来源:牛客网 题目描述 我们知道有一种神奇的排序方法叫做猴子排序,就是把待排序的数字写在卡片上,然后让猴子把 ...

  10. 818E - Card Game Again(尺取法)

    818E - Card Game Again 题意 给出一个数列,选择连续的一段使得这些数字的乘积是 k 的倍数,问合法的方案数. 分析 尺取法.设 num 为连续的数的乘积,只要对于 k 的每个素因 ...