Razor语法完全手册:掌握@指令、模板布局与Tag Helper的实用指南

📅 2026/7/28 6:46:42 👁️ 阅读次数 📝 编程学习
Razor语法完全手册:掌握@指令、模板布局与Tag Helper的实用指南

Razor语法完全手册:掌握@指令、模板布局与Tag Helper的实用指南

【免费下载链接】razorCompiler and tooling experience for Razor ASP.NET Core apps in Visual Studio and VS Code.项目地址: https://gitcode.com/gh_mirrors/razo/razor

Razor是ASP.NET Core应用程序中用于创建动态Web页面的强大模板引擎,它将HTML标记与C#代码无缝结合,让开发者能够轻松构建交互式Web应用。本文将全面介绍Razor语法的核心概念,包括@指令、模板布局和Tag Helper的使用方法,帮助你快速掌握这一必备技能。

一、Razor基础:@符号的魔力 ✨

在Razor中,@符号是连接HTML和C#代码的桥梁。它不仅用于标识C#代码块,还能直接输出表达式结果。以下是几种常见用法:

1. 输出表达式

<p>当前时间: @DateTime.Now</p> <p>欢迎消息: @($"Hello, {User.Name}!")</p>

2. 代码块

@if (User.IsAuthenticated) { <p>欢迎回来,@User.Name!</p> } else { <p>请<a href="/login">登录</a>以继续</p> }

3. 循环结构

<ul> @foreach (var item in Model.Items) { <li>@item.Name - @item.Price.ToString("C")</li> } </ul>

二、必备@指令:构建页面基础 🚀

Razor提供了多种@指令,用于定义页面特性和行为。以下是最常用的几个:

1. @page:定义Razor页面

用于标识Razor Pages文件,指定页面路由:

@page "/products" @model ProductsModel

提示:在Razor Pages应用中,每个.cshtml文件顶部都需要@page指令

2. @model:指定页面模型

声明页面使用的模型类型,使强类型视图成为可能:

@model CustomerViewModel <h1>@Model.CustomerName的订单</h1>

3. @inject:依赖注入

在视图中注入服务:

@inject IEmailService EmailService <button onclick="@(async () => await EmailService.SendConfirmationAsync(Model.Email))"> 发送确认邮件 </button>

4. @addTagHelper:引入Tag Helper

启用Tag Helper功能,扩展HTML元素的能力:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <form asp-action="Create"> <!-- 自动生成正确的表单action --> </form>

三、模板布局:打造一致的页面结构 📐

Razor提供了强大的布局系统,确保网站各页面保持一致的外观和行为。

1. 布局文件(_Layout.cshtml)

定义网站的整体结构,包括公共的头部、导航和页脚:

<!DOCTYPE html> <html> <head> <title>@ViewData["Title"] - 我的应用</title> <link rel="stylesheet" href="~/css/site.css" /> </head> <body> <header> <nav> <!-- 导航菜单 --> </nav> </header> <main> @RenderBody() <!-- 页面内容将在这里呈现 --> </main> <footer> <!-- 页脚内容 --> </footer> </body> </html>

2. @inherits:继承布局

在视图中指定要使用的布局:

@inherits LayoutComponentBase @{ Layout = "_Layout"; }

3. @section:定义页面区域

在视图中定义可在布局中呈现的内容块:

@section Scripts { <script src="~/js/product-details.js"></script> }

在布局中使用@RenderSection("Scripts")呈现这些内容。

四、Tag Helper:增强HTML元素 🔧

Tag Helper是Razor的强大功能,它允许服务器端代码参与创建和呈现HTML元素。

1. 内置Tag Helper

ASP.NET Core提供了多种内置Tag Helper,如表单、链接和图像:

<!-- 表单Tag Helper --> <form asp-action="Create" asp-controller="Products"> <input asp-for="ProductName" /> <span asp-validation-for="ProductName"></span> <button type="submit">保存</button> </form> <!-- 链接Tag Helper --> <a asp-action="Details" asp-route-id="123">查看详情</a>

2. 视图组件Tag Helper

使用<vc:前缀调用视图组件:

@addTagHelper "*, MyApp" <vc:product-card product="Model.FeaturedProduct" /> <vc:cart-summary count="@Model.CartItems.Count" />

3. 自定义Tag Helper

创建自己的Tag Helper以扩展HTML功能。例如,创建一个格式化日期的Tag Helper:

[HtmlTargetElement("date-format")] public class DateFormatTagHelper : TagHelper { public DateTime Value { get; set; } public string Format { get; set; } = "yyyy-MM-dd"; public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "span"; output.Content.SetContent(Value.ToString(Format)); } }

使用自定义Tag Helper:

@addTagHelper *, MyApp <date-format value="@DateTime.Now" format="yyyy年MM月dd日"></date-format>

五、Razor开发最佳实践 💡

1. 代码组织

  • 将复杂逻辑放在视图模型或服务中,保持视图简洁
  • 使用局部视图(@Html.Partial)重用UI组件
  • 利用_ViewImports.cshtml引入常用命名空间和Tag Helper

2. 性能优化

  • 使用@model强类型视图避免类型转换
  • 利用@inject注入服务而非直接在视图中实例化
  • 合理使用缓存标签助手<cache>减少重复计算

3. 可维护性

  • 保持视图专注于UI呈现,避免复杂业务逻辑
  • 使用布局和部分视图确保一致的UI
  • 遵循DRY原则,提取可重用组件

Razor项目典型文件结构展示,包含布局、页面和视图组件

六、快速入门:开始使用Razor

要开始使用Razor开发ASP.NET Core应用,只需按照以下步骤操作:

  1. 克隆仓库:
git clone https://gitcode.com/gh_mirrors/razo/razor
  1. 探索示例代码:

    • Razor语法示例:src/Razor/benchmarks/testapps/ComponentApp/Components/Pages/FormattingTest.razor
    • 布局示例:src/Compiler/perf/Microsoft.AspNetCore.Razor.Microbenchmarks.Generator/SampleApp/Shared/MainLayout.razor
    • Tag Helper示例:src/Compiler/Microsoft.AspNetCore.Mvc.Razor.Extensions/test/TestFiles/IntegrationTests/CodeGenerationIntegrationTest/ViewComponentTagHelperOptionalParam.cshtml
  2. 参考官方文档:docs/Onboarding Docs/01_Razor_Basics.md

通过本文的介绍,你已经掌握了Razor语法的核心概念和使用方法。无论是构建简单的网页还是复杂的Web应用,Razor都能帮助你高效地创建动态、交互式的用户界面。开始动手实践,体验Razor带来的开发乐趣吧!

【免费下载链接】razorCompiler and tooling experience for Razor ASP.NET Core apps in Visual Studio and VS Code.项目地址: https://gitcode.com/gh_mirrors/razo/razor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考