- ASP.NET MVC 教程
- ASP.NET MVC - 主页
- ASP.NET MVC - 概述
- ASP.NET MVC - 模式
- ASP.NET MVC - 环境设置
- ASP.NET MVC - 入门
- ASP.NET MVC - 生命周期
- ASP.NET MVC - 路由
- ASP.NET MVC - 控制器
- ASP.NET MVC - 操作
- ASP.NET MVC - 过滤器
- ASP.NET MVC - 选择器
- ASP.NET MVC - 视图
- ASP.NET MVC - 数据模型
- ASP.NET MVC - 帮助程序
- ASP.NET MVC - 模型绑定
- ASP.NET MVC - 数据库
- ASP.NET MVC - 验证
- ASP.NET MVC - 安全
- ASP.NET MVC - 缓存
- ASP.NET MVC - 剃刀
- ASP.NET MVC - 数据注释
- Nuget包管理
- ASP.NET MVC - Web API
- ASP.NET MVC - 脚手架
- ASP.NET MVC - 引导程序
- ASP.NET MVC - 单元测试
- ASP.NET MVC - 部署
- ASP.NET MVC - 自托管
- ASP.NET MVC 有用资源
- ASP.NET MVC - 快速指南
- ASP.NET MVC - 有用的资源
- ASP.NET MVC - 讨论
ASP.NET MVC - 剃刀
在本章中,我们将了解 ASP.NET MVC 应用程序中的 Razor 视图引擎以及 Razor 存在的一些原因。Razor 是一种标记语法,可让您使用 C# 和 VB.Net 将基于服务器的代码嵌入到网页中。它不是一种编程语言。它是一种服务器端标记语言。
Razor 与 ASP.NET MVC 没有联系,因为 Razor 是通用模板引擎。您可以在任何地方使用它来生成 HTML 等输出。只是 ASP.NET MVC 实现了一个视图引擎,允许我们在 MVC 应用程序内部使用 Razor 来生成 HTML。
您将拥有一个模板文件,其中包含一些文字文本和一些代码块。您可以将该模板与某些数据或特定模型相结合,其中模板指定数据应该出现的位置,然后执行该模板以生成输出。
Razor 与 ASPX
Razor 与 ASPX 文件的工作方式非常相似。ASPX 文件是模板,其中包含文字文本和一些指定数据应显示位置的 C# 代码。我们执行这些命令来为我们的应用程序生成 HTML。
ASPX 文件依赖于 ASP.NET 运行时才能解析和执行这些 ASPX 文件。Razor 没有这样的依赖关系。
与 ASPX 文件不同,Razor 有一些不同的设计目标。
目标
微软希望 Razor 易于使用和学习,并在 Visual Studio 等工具中工作,以便可以使用 IntelliSense、调试器,但他们希望 Razor 与特定技术无关,例如 ASP.NET 或ASP.NET MVC。
如果您熟悉 ASPX 文件的生命周期,那么您可能会意识到,解析和执行这些 ASPX 文件依赖于 ASP.NET 运行时。微软希望 Razor 更加智能,让开发人员的工作变得更加轻松。
让我们看一下 ASPX 文件中的示例代码,其中包含一些文字文本。这是我们的 HTML 标记。它还包含少量 C# 代码。
<% foreach (var item in Model) { %> <tr> <td> <%: Html.ActionLink("Edit", "Edit", new { id = item.ID })%> | <%: Html.ActionLink("Details", "Details", new { id = item.ID }) %>| <%: Html.ActionLink("Delete", "Delete", new { id = item.ID })%> </td> <td> <%: item.Name %> </td> <td> <%: String.Format("{0,g}", item.JoiningDate) %> </td> </tr> <%}%>
但这些 Web 表单基本上被 Microsoft 重新调整了用途,以便与 MVC 的早期版本一起使用,这意味着 ASPX 文件从来都不是 MVC 的完美匹配。
当您需要从 C# 代码转换回 HTML 以及从 HTML 代码转换回 C# 代码时,语法有点笨拙。IntelliSense 还会提示您执行在 MVC 项目中没有意义的操作,例如将输出缓存和用户控件的指令添加到 ASPX 视图中。
现在看看这段代码,它产生相同的输出,不同之处在于它使用 Razor 语法。
@foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | @Html.ActionLink("Details", "Details", new { id = item.ID }) | @Html.ActionLink("Delete", "Delete", new { id = item.ID }) </td> <td> @item.Name </td> <td> @String.Format("{0,g}", item.JoiningDate) </td> </tr> }
使用 Razor 语法,您可以使用“@”符号开始一段 C# 代码,Razor 解析将自动切换为将此语句(此 foreach 语句)解析为一段 C# 代码。
但是,当我们完成 foreach 语句并且有了左大括号时,我们可以从 C# 代码转换为 HTML,而无需在其中放置显式标记,例如尖括号中的百分比。
Razor 解析器足够智能,可以在 C# 代码和 HTML 之间切换,并且当我们需要在此处放置右大括号时,可以再次从 HTML 切换回 C# 代码。如果您比较这两个代码块,我想您会同意 Razor 版本更易于阅读和编写。
使用 Razor 创建视图
让我们创建一个新的 ASP.Net MVC 项目。
在名称字段中输入项目名称,然后单击“确定”。
为了简单起见,选择“空”选项并选中“添加文件夹和核心引用”部分中的 MVC 复选框,然后单击“确定”。它将创建一个具有最少预定义内容的基本 MVC 项目。
Visual Studio 创建项目后,您将看到“解决方案资源管理器”窗口中显示许多文件和文件夹。由于我们是从空项目模板创建 ASP.Net MVC 项目,因此目前应用程序不包含任何要运行的内容。由于我们从一个空应用程序开始,甚至没有一个控制器,所以让我们添加一个 HomeController。
要添加控制器,请右键单击解决方案资源管理器中的控制器文件夹,然后选择添加 → 控制器。它将显示“添加支架”对话框。
选择“MVC 5 Controller – Empty”选项并单击“Add”按钮,然后将出现“Add Controller”对话框。
将名称设置为 HomeController 并单击“添加”按钮。您将在 Controllers 文件夹中看到一个新的 C# 文件“HomeController.cs”,该文件也可以在 Visual Studio 中打开以进行编辑。
右键单击索引操作并选择添加视图...
从模板下拉列表中选择空,然后单击添加按钮。Visual Studio 将在View/Home文件夹中创建一个 Index.cshtml 文件。
请注意,Razor 视图具有 cshtml 扩展名。如果您使用 Visual Basic 构建 MVC 应用程序,它将是一个 VBHTML 扩展。该文件的顶部是一个代码块,该代码块显式将此 Layout 属性设置为 null。
当您运行此应用程序时,您将看到空白网页,因为我们已经从空模板创建了视图。
让我们添加一些 C# 代码以使事情变得更有趣。要在 Razor 视图中编写一些 C# 代码,我们要做的第一件事是键入“@”符号,告诉解析器它将在代码中执行某些操作。
让我们创建一个 FOR 循环,在大括号内指定“@i”,这实际上是告诉 Razor 输入 i 的值。
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name = "viewport" content = "width = device-width" /> <title>Index</title> </head> <body> <div> @for (int index = 0; index < 12; index++){ <div>@index </div> } </div> </body> </html>
运行该应用程序,您将看到以下输出。