首页 程序笔记 MVC5 Razor语法

MVC5 Razor语法

Razor视图引擎是Asp.net MVC3中新扩展的内容,并且也是它的默认视图引擎。还有另外一种Web Forms视图引擎。通过前面的文章可知在Asp.net mvc5中创建视图,默认使用的是Razor视图引擎。而且真正的就一种了。记得之前版本的,还可以让开发者选择是使用Razor还是webfroms视图引擎。

Razor为视图表示提供了一种精简的语法,最大限度的减少了语法和额外的字符。这样就有效的减少了语法障碍,并且在视图标记语言中也没有新的语法规则。

Razor支持两种文件类型,分别是.cshtml 和.vbhtml,其中.cshtml 的服务器代码使用了c#的语法,.vbhtml 的服务器代码使用了vb.net的语法。

Razor语法

Razor的核心转换字符是“at”符号(@)。

该字符作用

用作标记-代码的转换字符。

代码-标记的转换字符。

有两种基本类型的转换:代码表达式和代码块。求出表达式的值,然后将值写入到响应中。

代码表达式

隐式代码表达式

示例:

1         @{string strName = "wofly";}

2         <h1> Length of the boy's name is  @strName.Length chars.</h1>

结果

Razor十分智能,可以知道表达式后面的空格字符不是一个有效的标识符,所以可以顺畅地回到标记语言。

显示代码表达式

Razor自动从代码转会标记的能力有时也会带来二义性,例如下面的Razor片段:

1         @{string rootNameSpace = "MyApp";}

2         <span>@rootNameSpace.Models</span>

想要输出的结果是:

<span>MyApp.Models</span>

编译时出错,提示string没有Models属性。在这种情况下,Razor不能理解我们想要干啥,而会认为@rootNameSpace是代码表达式。那么该怎么解决呢?Razor可以通过将表达式用圆括号括起来显示代码表达式:

 <span>@(rootNameSpace).Models</span>

这样就告知Razor,.Models是字面量文本,而不是表达式的一部分。

@符号如何跟邮箱中的@区别呢?

例如:

 <span>wolfy@163.com</span>

你会发现,形如上面的代码并没有报错,Razor是如何做到呢?

Razor采用了一个简单的算法来判别看起来像邮箱地址的字符串到底是不是一个有效的邮箱地址。虽然它并不完美,但却可以适用于大多数情况。在一些特殊情况下,有效的邮箱地址可能会显示不出来,这是可以用两个@@符号转义一个@符号。

如果,我们想要这样的字符串作为一个表达式,该怎么办?

假如,我们有这样的一个列表项:

<li>item_@item.Length</li>

这种特殊情况下,这个表达式会被解析为一个邮箱地址,所以Razor将其逐字打印。但我们想要的结果是:

<li>item_3</li>

所以遇到这种情况,我们仍可以使用圆括号指明想要的内容。

<li>item_@(item.Length)</li>

如果想输出@开头的字符,可以使用@@转义@字符。

 HTML编码

在很多情况下需要用视图显示用户的输入,例如一些网站的评论功能。所以总是存在潜在的跨站脚本注入攻击(XSS)。这些,Razor也替我们想到了,Razor表达式是用HTML自动编码的。

1         @{string strAlert = "<script>alert('警告');</script>";}

2         <span>@strAlert</span>

查看生成的html,你会发现对标签进行了html编码:

<span>&lt;script&gt;alert(&#39;警告&#39;);&lt;/script&gt;</span>

页面显示

无编码代码表达式

如果我们确实想让浏览器解析成html标签,就需要返回一个System.Web.IHtmlString对象的实例,这种情况下Razor并不对它进行编码。例如html辅助类。同样我们可以使用Html.Raw方法。

1         @{string strAlert = "<script>alert('警告');</script>";}

2         <span>@Html.Raw(strAlert)</span>

此时浏览该视图,就会出现弹出框。

另外需要注意,当在js中将用户提供的值赋给变量时,要使用js字符串编码而不仅仅是html编码。也就是要是用@Ajax.JavaScriptStringEncode方法对用户输入进行编码。

代码块

代码块是简单的执行代码部分。

例如

1         @{

2             int x = 123;

3             string y = "wofly";

4         }

上面代码块定义变量int类型的x和字符串类型y,如果想输出它们,则可以使用@x和@y。

文本和标签混合使用

1         @foreach (var item in models) {

2         <span>@item.Name</span>

3         }

 混合代码和纯本文

1 @if (true)

2 {

3     <text>这是文本</text>

4 }

服务器端的注释可以使用@**@对不想要的代码进行注释。

@*@if (true)

{

    <text>这是文本</text>

}*@

调用泛型方法

1  @(Html.SomeMethod<T>())

Razor语法总结

 这里简单的介绍了Razor的两种基本类型:代码表达式和代码块。语法没有想的那么难。关键在于@字符。

2

站心网

Razor视图引擎是Asp.net MVC3中新扩展的内容,并且也是它的默认视图引擎。还有另外一种Web Forms视图引擎..

为您推荐

C#7.0新语法介绍

一、out输出参数在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:先定义一个方法,方法参数是out类型的输出参数:private void DoNoting(out int x, out int y){x = 1;y = 2;}以前版本的写法: /..

.NET Core Razor Page ajax请求返回400 Bad request

Razor页面被设计为默认启动防跨站请求伪造攻击的,防伪令牌生成和验证被自动包含在Razor页面中。打开页面可以看到表单里有一个隐藏的input<input name="__RequestVerificationToken" type="hidden" value="CfDJ8JOah..

ASP.NET Core 使用Razor code blocks替代@helper

@helper 是 ASP.NET Razor 视图引擎的一种语法,它允许你在 Razor 视图中定义和使用自定义 HTML 帮助程序。这些帮助程序可以被多次调用,以生成复杂的 HTML。在ASP.NET MVC中可以使用@helper定义一个返回IHtmlString..

.NET Core Razor page/MVC 返回json忽略空属性

.NET Core Razor page/MVC 返回json忽略空属性,修改program.cs。添加配置builder.Services.AddRazorPages().AddJsonOptions(options => {options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json..

ASP.NET Core MVC/RazorPage使用Anti-Forgery Tokens进行XSRF/CSRF防护

ASP.NET Web Stack运行时使用同步器令牌模式的变体来抵御XSRF攻击。同步器令牌模式的一般形式是,除了身份验证令牌):一个令牌作为Cookie,另一个作为表单值,两个反XSRF令牌提交到服务器。服务器在两个令牌通过比较..

c# 常用语法糖

C#中有许多语法糖(Syntactic Sugar),它们是一些语法上的简化,使代码更易于阅读和编写。以下是一些常见的C#语法糖示例:自动属性初始化器:可以在属性声明时直接初始化属性的值,而无需在构造函数中初始化。publi..

C#12新特性和语法糖有哪些?

C# 12 于 2023 年 8 月 10 日发布,引入了许多新特性和语法糖,包括:C# 12 新特性records:一种新的值类型,可用于表示具有固定字段集合的实体。记录可以用于表示数据库表、对象模型或其他类似的结构。pattern matc..

使用VSCode开发.NET MVC常用插件

以下是一些在使用 Visual Studio Code (VSCode) 开发 .NET MVC 时常用的插件:C#:提供 C# 语言支持,包括代码补全、语法检查、调试等功能。Razor:提供 Razor 模板语法的支持,用于在视图中嵌入 C# 代码。OmniSharp..

C#12最新语法糖示例

以下是一些 C#12 最新语法糖的示例:记录记录是一种新的数据结构,它将数据和方法封装在一起。记录可以简化代码的编写和阅读。record Person(string name, int age){public void SayHello(){Console.WriteLine($"Hel..

.NET MVC和Razor Page对比

.NET MVC 和 Razor Pages 都是 ASP.NET Core 中常用的 Web 应用程序框架。.NET MVC 和 Razor Pages 有些类似,但也有一些关键区别:.NET MVC:模型-视图-控制器(MVC)架构:使用 MVC 设计模式,将应用程序分为模型..

.NET的Razor和Blazor有什么区别和联系?

什么是RazorRazor 是一个用于构建动态 Web 页面的标记语言和引擎,用来创建动态网页。它允许在 HTML 中嵌入 C# 代码,使开发人员能够更方便地生成动态内容。Razor 可以与 ASP.NET Web Forms、ASP.NET MVC 和 ASP.NET..

f#和c#语法相似吗?

F# 和 C# 都是运行在 .NET 平台上的编程语言,因此它们在一些方面会有一些相似之处,但在语法、功能和设计哲学上也存在一些明显的差异。以下是 F# 和 C# 的一些语法和设计上的相似点和差异点:F# 和 C# 的相似点共同..

splunk常用查询语法

Splunk 是基于事件的搜索和分析平台,用于从大量数据中提取见解。Splunk 使用搜索处理语言 (SPL) 来定义搜索查询。SPL 是一种类似 SQL 的查询语言,用于从 Splunk 数据集中提取数据。Splunk 常用查询语法包括:全文..

.NET9新增了哪些语法糖?

.NET 9 新增了以下语法糖:1. 全局 using 语句.NET 9 允许在程序集级别使用 using 语句,这可以简化代码并避免重复。例如:global using System;global using System.Collections.Generic;public class MyClass{publ..

EF Core 8 (EF8) Contains报错:Microsoft.Data.SqlClient.SqlException (0x80131904): 关键字 'WITH' 附近有语法错误。

最近将原来.NET6的项目升级到.NET8,用的EF Core版本也相应升级到EF8版本,在查询数据的时候使用Contains运算符的地方报错了。Microsoft.Data.SqlClient.SqlException (0x80131904): 关键字 'WITH' 附近有语法错误。..

splunk常用搜索语法

Splunk是一个用于搜索、监控和分析大量数据的平台,其搜索语法提供了丰富的功能来过滤、分析和可视化数据。以下是一些常用的Splunk搜索语法:splunk基本搜索语法关键字搜索your_search_keyword逻辑运算符AND, OR, NO..

发表回复

返回顶部