ASP.NET Core MVC 从入门到精通之Razor语法

news/2024/5/10 0:55:01/文章来源:https://blog.csdn.net/fengershishe/article/details/130315711

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启动运行,以及命名约定,创建控制器,视图,模型,接收参数,传递数据,路由,页面布局,wwwroot和客户端库等内容,今天继续讲解ASP.NET Core MVC 中Razor语法等相关内容,仅供学习分享使用。

Razor视图

在ASP.NET Core MVC项目中,默认创建的视图,都是以cshtml为后缀的Razor视图。

 基于 Razor 的视图模板:

  • 具有 .cshtml 文件扩展名。
  • 提供一种巧妙的方法来使用 C# 创建 HTML 输出。

添加Razor视图

在项目中添加视图,可以通过在控制器中的Action上右键进行添加对应视图,也可以通过在Views中创建目录,然后目录上右键添加视图,如下所示:

 打开添加视图对话框,选择Razor视图,点击【添加】按钮,如下所示:

 输入视图名称,如Index,点击【添加】按钮,模板可根据具体需要是否添加,如下所示:

 经过以上步骤后,即可添加视图成功,如下所示:

 默认视图效果如下所示:

Razor介绍

Razor 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。 Razor 语法由 Razor 标记、C# 和 HTML 组成。 包含 Razor 的文件通常具有 .cshtml 文件扩展名。 从 Razor 标记呈现 HTML 与从 HTML 文件呈现 HTML 没有什么不同。

Razor语法

Razor 支持 C#,并使用 @ 符号从 HTML 转换为 C#。 Razor 计算 C# 表达式,并将它们呈现在 HTML 输出中。当符号 @ 后跟 Razor 保留关键字时,它将转换为 Razor特定于 的标记。 否则会转换为纯 HTML。不过凡事总有特例,如包含在email中的@符号将不会被当成转换字符,而是直接显示。

<a href="mailto:Alan.hsiang@qq.com">Alan.hsiang@qq.com</a>

隐式Razor表达式

隐式 Razor 表达式以 @ 开头,后跟 C# 代码。

<p>今天是:@DateTime.Now</p>
<p>昨天是:@DateTime.Now.AddDays(-1)</p>

隐式表达式不能包含空格,但 C# await 关键字除外。 如果该 C# 语句具有明确的结束标记,则可以混用空格:

@{ViewData["Title"] = "Index";async Task<string> DoSomething(string left,string right){return left + right;}
}<h1>Index</h1>
<p>@await DoSomething("hello", "world")</p>

隐式表达式不能包含 C# 泛型,因为括号 (<>) 内的字符会被解释为 HTML 标记。 以下代码无效:

@{ViewData["Title"] = "Index";string? GenericMethod<T>(T t){return t?.ToString();}
}<h1>Index</h1>
<!--不能使用泛型-->
<p>@GenericMethod<int>(0)</p>

注意:泛型方法调用必须包装在 显式 Razor 表达式 或 Razor 代码块中。

显式Razor表达式

显式 Razor 表达式由 @ 符号和一对小括号组成,将计算 @() 括号中的所有内容,并将其呈现到输出中。 若要进行一些计算,可使用以下 Razor 标记:

@{ViewData["Title"] = "Index";int a=1,b=2,c=3,d=4;
}<h1>Index</h1>
<!--显式Razor表达式-->
<p>@(a+b+c+d)</p>
<!--隐式Razor表达式-->
<p>@a+b+c+d</p>

在上述例子中,显示Razor表达式和隐式Razor表达式在页面显示的效果是不同的,如下所示:

 另外在隐式Razor表达式中,不支持泛型,在显示Razor表达式中是支持泛型的。如下所示:

<p>@(GenericMethod<int>(10))</p>

表达式编码

通过Razor表达式进行输出时,有时并不能达到想要效果,如下所示:

<!--输出原生标签并进行转义-->
<div>@("<span>Hello World</span>")</div>
<!--输入标签中的内容-->
<div>@Html.Raw("<span>Hello World</span>")</div>

在页面上输出结果如下所示:

Razor代码块

Razor 代码块以 @ 开始,并括在 {} 中代码块内的 C# 代码不会呈现,这点与表达式不同。 一个视图中的代码块和表达式共享相同的作用域并按顺序进行定义:

@{var quote = "我是公子小六";
}<p>@quote</p>@{quote = "小六公子是我";
}<p>@quote</p>

在页面输出 如下所示:

隐式转换

代码块中的默认语言是 C#,但 Razor 页面可以转换回 HTML:

@{var name = "我是公子小六";<p>Now in HTML, was in C# @name</p>
}

显式行转换

要在代码块内以 HTML 形式呈现整个行的其余内容,请使用 @: 语法:

@for (var i = 0; i < students.Length; i++)
{var student = students[i];@:student: @student.Name
}

如果代码中没有 @:,会生成 Razor 运行时错误。

Razor 文件中多余的 @ 字符可能会导致代码块中后面的语句发生编译器错误。 这些额外的 @ 编译器错误:

  • 可能难以理解,因为实际错误发生在报告的错误之前。
  • 在将多个隐式表达式和显式表达式合并到单个代码块后很常见。

控制结构

控制结构是对代码块的扩展。 代码块的各个方面(转换为标记、内联 C#)同样适用于以下结构:

条件控制语句

条件 @if, else if, else,如下所示:

@{int value = 10;
}@if (value % 2 == 0)
{<p>The value was even.</p>
}
else if (value >= 1337)
{<p>The value is large.</p>
}
else
{<p>The value is odd and small.</p>
}

以下标记展示如何使用 switch 语句:

@switch (value)
{case 1:<p>The value is 1!</p>break;case 1337:<p>Your number is 1337!</p>break;default:<p>Your number wasn't 1 or 1337.</p>break;
}

循环控制

循环 @for, @foreach, @while, and @do while

@for循环

@{var students = new Student[]{new Student(){Id=1,Name="公"},new Student(){Id=2,Name="子"},new Student(){Id=3,Name="小"},new Student(){Id=4,Name="六"},};
}
@for (var i = 0; i < students.Length; i++)
{var student = students[i];<div><span>Id: @student.Id</span><span>Name: @student.Name</span></div>
}

@foreach循环

@foreach (var student in students)
{<div><span>Id: @student.Id</span><span>Name: @student.Name</span></div>
}

@while循环

@{ var i = 0; }
@while (i < students.Length)
{var student = students[i];<div><span>Id: @student.Id</span><span>Name: @student.Name</span></div>i++;
}

@do while循环

@{ var i = 0; }
@do
{var student = students[i];<div><span>Id: @student.Id</span><span>Name: @student.Name</span></div>i++;
} while (i < students.Length);

以上4种循环方式实现的效果都是一样的,如下所示:

异常捕获

@try, catch, finally,异常处理与 C# 类似:

@try
{throw new InvalidOperationException("无效操作.");
}
catch (Exception ex)
{<p>异常信息: @ex.Message</p>
}
finally
{<p>finally块.</p>
}

在页面上输出如下内容:

Razor注释

Razor 支持 C# 和 HTML 注释:

@{/* C# comment */// Another C# comment
}
<!-- HTML comment -->
@*@{/* C# comment */// Another C# comment}<!-- HTML comment -->
*@

在呈现网页之前,服务器会删除 Razor 注释。 Razor 使用 @* *@ 来分隔注释。 以上代码第3段已被注释禁止,因此服务器不呈现任何标记。

Razor保留关键字

Razor 关键字

  • page
  • namespace
  • functions
  • inherits
  • model
  • section
  • helper(ASP.NET Core 当前不支持)

Razor 关键字使用 @(Razor Keyword) 进行转义(例如,@(functions))。

C# Razor 关键字

  • do while
  • default
  • for foreach
  • if else
  • lock
  • switch case
  • try catch finally
  • using

C# Razor 关键字必须使用 @(@C# Razor Keyword) 进行双转义(例如,@(@case))。 第一个 @ 对 Razor 分析程序转义。 第二个 @ 对 C# 分析器转义。

Razor 未使用的保留关键字

  • class

以上就是ASP.NET Core MVC 从入门到精通之Razor语法简介的主要内容,关于其他Razor语法内容,可参考文档:

参考文档:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?view=aspnetcore-7.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_670549.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言基础----Go语言简介

【原文链接】Go语言基础----Go语言简介 一、Go语言简介 Go语言&#xff0c;又称Golang&#xff0c;是Google公司的Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson开发的一种静态强类型、编译型的语言。Go语言语法和C语言接近&#xff0c;但是功能上内存安全&#xff…

Day2_vue集成elementUI完善布局

上一节&#xff0c;实现了从O到vue页面主体框架的搭建&#xff0c;这一节补充完善搜索框&#xff1b;新增、删除、导入、导出等按钮&#xff1b;表格设置&#xff1b;分页&#xff1b;面包屑的实现&#xff01; 目录 搜索框 新增删除、导入、导出按钮 表格设置 设置边框&a…

AI剧本拆解,教你利用AI快速拆解剧本

AI剧本拆解是一项将影视、戏剧等剧本进行分析和优化的技术&#xff0c;可以帮助制作团队更好地规划角色、情节、场景等元素&#xff0c;并提升作品的艺术水平和观赏体验。 1、为什么要拆解剧本&#xff1f; 剧本拆解是制片人和导演的第一项工作&#xff0c;把剧本中各项要素分…

AI 编程

GitHub Copilot&#xff08;收费&#xff09; 开发者&#xff1a;微软 openAI 2022年8月22日之后开始收费&#xff0c;10美元/月&#xff0c;100美元/年。 CodeGeeX&#xff08;免费&#xff09; CodeGeeX 可以根据自然语言注释描述&#xff08;支持中英文注释&#xff09…

flask+apscheduler+企业微信消息机器人推送

简介&#xff1a;APScheduler是一个轻量级的Python库&#xff0c;用于在后台运行定时任务和延迟任务。它可以轻松地安排任务并支持多种类型的触发器&#xff0c;例如固定间隔、日期/时间表达式、CRON表达式等。APScheduler还提供了多个后台调度器实现&#xff0c;例如基于线程池…

Qt连接MySQL数据库最详细的教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1&#xff09;所需代码2&#xff09;解决QMYSQL driver not loaded 2.通过ODBC连接MySQL数据库&#xff11;&#xff09;官方解释2…

taro之项目初始化模版

项目初始化模板 一直以来&#xff0c;在使用 Taro CLI 的 taro init 命令创建项目时&#xff0c;CLI 会提供若干内置模板给开发者选择。但是很多团队都有自己独特的业务场景&#xff0c;需要使用和维护的模板也不尽一致&#xff0c;因此 Taro 支持把项目模板打包成一个能力赋予…

《Netty》从零开始学netty源码(四十四)之PoolChunk释放内存

free 当PoolChunk需要释放内存空间时可调用free方法&#xff0c;具体的源码过程如下&#xff1a; 在这个过程中最重要的是第三步的collapseRuns方法&#xff0c;当释放了空间以后要更新runsAvail和runAvailsMap的信息&#xff0c;如果handle对应的内存空间的上边界以及下边界是…

任务调度原理 通俗详解(FreeRTOS)

寄存器说明 以cortex-M3&#xff0c;首先先要了解比较特别的几个寄存器&#xff1a; r15 PC程序计数器&#xff08;Program Counter&#xff09;,存储下一条要执行的指令的地址。 r14 LR连接寄存器&#xff08;Link Register &#xff09;&#xff0c;保存函数返回地址&#x…

代码随想录算法训练营第四十三天|1049. 最后一块石头的重量 II 、494. 目标和、474.一和零

文章目录 背包问题题型1049. 最后一块石头的重量 II494. 目标和474.一和零 背包问题题型 等和子集 —0-1背包能否装满最后一块石头—0-1背包尽量装满目标和—0-1背包装满&#xff0c;且有多少种装的方式&#xff08;组合问题&#xff09; 1049. 最后一块石头的重量 II 题目链…

从数据处理到人工智能(常用库的介绍)

Python库之数据分析 ​​​​​​​​​​​​ 可以这么理解pandas通过扩展了对一维数据和二维数据的一种表示&#xff0c;因而能够形成更高层对数据的操作&#xff0c;简化数据分析的运行 Python库之数据可视化 Matplotlib — Visualization with Python seaborn: statistic…

C++ 编程笔记(本人出品,必属精品)

文章目录 Part.I IntroductionChap.I 快应用 Part.II C 基础Chap.I 一些待整理的知识点Chap.I 常用的库或类 Part.III 杂记Part.X Others WorkChap.I 大佬的总结Chap.II 大佬的轮子 Part.I Introduction 前言&#xff1a;C 用的人还是比较多的&#xff0c;主要是它比较快并且面…

不是什么高深玩意,Arrays.asList、ArrayList.subList需要注意的坑

前言 集合是日常工作中几乎每天都在用的玩意&#xff0c;也是八股文中被翻烂的东西&#xff0c;诸如List、Map&#xff0c;确实很重要也很实用&#xff0c;但是不注意细节就比较容易踩坑。比较常见的就是今天要整理的Arrays.asList和ArrayList.subList。不是什么高深的东西&…

Oracle跨服务器取数——DBlink 初级使用

前言 一句话解释DBlink是干啥用的 实现跨库访问的可能性. 通过DBlink我们可以在A数据库访问到B数据库中的所有信息,例如我们在加工FDS层表时需要访问ODS层的表,这是就需要跨库访问 一、DBlink的分类 private&#xff1a;用户级别&#xff0c;只有创建该dblink的用户才可以使…

一篇文章告诉你金融行业如何高效管理文件

由于金融行业的行业属性&#xff0c;信息安全万分重要。因此在文件管理工具时&#xff0c;要注意数据安全问题&#xff0c;那么金融行业如何高效管理文件呢&#xff1f; 首先金融行业在文件管理时可能面临以下问题&#xff1a; 1&#xff0c;资料繁杂&#xff0c;整理困难&…

starrocks基于prometheus实现监控告警

监控报警 本文介绍如何为 StarRocks 设置监控报警。 StarRocks 提供两种监控报警的方案。企业版用户可以使用内置的 StarRocksManager&#xff0c;其自带的 Agent 从各个 Host 采集监控信息&#xff0c;上报至 Center Service&#xff0c;然后做可视化展示。StarRocksManager …

虹科新品 | 用于医疗应用的压力和气体流量传感器

ES Systems在创新MEMS方面拥有丰富的经验&#xff0c;设计了高质量和高性能的气体流量和压力传感器&#xff0c;由于其技术规格&#xff0c;出色的可靠性和有竞争力的价格&#xff0c;这些传感器在竞争产品中具有独特的品质。 Part.01 应用背景 众所周知&#xff0c;在医疗领域…

在函数中使用变量

shell脚本编程系列 向函数传递参数 函数可以使用标准的位置变量来表示在命令行中传给函数的任何参数。其中函数名保存在$0变量中&#xff0c;函数参数则依次保存在$1、$2等变量当中&#xff0c;也可以使用特殊变量$#来确定参数的个数 在脚本中调用函数时&#xff0c;必须将参…

【SWAT水文模型】SWAT水文模型建立及应用第四期: 气象数据的准备(待更新)

SWAT水文模型建立及应用&#xff1a; 气象数据的准备 1 简介2 气象数据的准备&#xff08;传统气象站&#xff09;2.1 天气发生器各参数的计算2.2 降水及气温输入数据的准备 3 气象数据的准备&#xff08;中国区域高精度同化气象站CMADS&#xff09;参考 本博客主要介绍气象数据…

本周一至周三总结

周一 学习如何进行竞品分析 对软件杯项目进行了竞品分析&#xff0c;测试了十余个强相关网站&#xff0c;为团队写好了竞品分析报告 分别对主要目标&#xff0c;竞品优劣点&#xff0c;竞品选择原因&#xff0c;产品创新点等进行了分析和阐述 周二 下午晚上刷了五道题 题解…