0

0

C#的Razor页面是什么?如何创建和使用?

月夜之吻

月夜之吻

发布时间:2025-09-12 08:05:01

|

957人浏览过

|

来源于php中文网

原创

Razor页面是ASP.NET Core中将C#代码嵌入HTML的轻量级开发方式,通过.cshtml文件实现前后端结合,使用@page、@model等指令定义页面和模型,支持动态数据渲染与表单处理,简化中小型应用开发流程。

c#的razor页面是什么?如何创建和使用?

Razor页面是ASP.NET Core中一种轻量级的页面开发方式,它允许你将C#代码嵌入到HTML中,从而创建动态Web页面。简单来说,它就是一种将前端展示和后端逻辑结合在一起的技术。

解决方案

Razor页面本质上是

.cshtml
文件,它包含了HTML标记、Razor指令和C#代码。ASP.NET Core运行时会解析这些文件,并将C#代码编译成最终的HTML输出。

创建Razor页面:

  1. 新建ASP.NET Core项目: 在Visual Studio中,选择“创建新项目”,然后选择“ASP.NET Core Web应用”,选择“Web应用(模型-视图-控制器)”或“Web应用”,这里选择“Web应用”会更接近Razor Pages的默认架构。
  2. 添加Razor页面: 在“Pages”文件夹下(如果选择的是Web应用(模型-视图-控制器)项目,则需要在“Views”文件夹下手动创建Pages文件夹),右键单击,选择“添加” -> “新建项”,然后选择“Razor页面”。 给它起个名字,比如“MyPage.cshtml”。

使用Razor页面:

打开

MyPage.cshtml
文件,你会看到类似这样的结构:

@page
@model MyWebApp.Pages.MyPageModel
@{
    ViewData["Title"] = "My Page";
}

<h1>@ViewData["Title"]</h1>

<p>This is my Razor page.</p>

<p>Current time: @DateTime.Now</p>

<ul>
    @foreach (var item in Model.MyList)
    {
        <li>@item</li>
    }
</ul>
  • @page
    : 这个指令将该文件标记为Razor页面。
  • @model
    : 指定与该页面关联的模型类。 通常,每个Razor页面都有一个对应的“页面模型”类,它处理页面的逻辑。 如果省略,则默认使用
    PageModel
    基类。
  • @{ ... }
    : 在花括号内可以编写C#代码块。
  • @ViewData["Title"]
    : 从
    ViewData
    字典中获取标题,
    ViewData
    允许你在页面和页面模型之间传递数据。
  • @DateTime.Now
    : 在HTML中嵌入C#表达式。
  • @foreach
    : 在HTML中嵌入C#循环。
  • Model.MyList
    : 访问页面模型中名为
    MyList
    的属性。

页面模型:

为了让Razor页面更具结构性,通常会创建一个与页面关联的页面模型类。 在

MyPage.cshtml
文件所在的文件夹中,创建一个名为
MyPage.cshtml.cs
的文件(注意文件名要对应)。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyWebApp.Pages
{
    public class MyPageModel : PageModel
    {
        public List<string> MyList { get; set; } = new List<string> { "Item 1", "Item 2", "Item 3" };

        public void OnGet()
        {
            // 在页面加载时执行的逻辑
        }
    }
}
  • MyPageModel
    : 页面模型类,继承自
    PageModel
  • MyList
    : 一个属性,可以在Razor页面中访问。
  • OnGet()
    : 处理HTTP GET请求的方法。 页面加载时会执行此方法。 还可以有
    OnPost()
    方法来处理POST请求。

运行项目:

运行ASP.NET Core项目,然后在浏览器中访问

/MyPage
(或者项目配置的路由),你应该能看到页面渲染的结果。

PPT.AI
PPT.AI

AI PPT制作工具

下载

Razor页面的优势是什么?为什么选择它而不是MVC?

Razor Pages简化了小型到中型Web应用的开发。与传统的MVC模式相比,它减少了样板代码,并将视图和控制器逻辑紧密地结合在一起。对于简单的页面,你不需要单独的控制器类,所有逻辑都可以在页面模型中处理。这使得代码更易于阅读和维护。当然,对于更复杂的应用程序,MVC可能仍然是更好的选择,因为它提供了更好的分离关注点。

如何在Razor页面中处理表单提交

要在Razor页面中处理表单提交,你需要使用

OnPost
方法。 首先,在你的Razor页面中创建一个表单:

<form method="post">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" />
    <button type="submit">Submit</button>
</form>

<p>You entered: @Model.Name</p>

然后在你的页面模型中,添加一个

Name
属性和一个
OnPost
方法:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyWebApp.Pages
{
    public class MyPageModel : PageModel
    {
        [BindProperty]
        public string Name { get; set; }

        public void OnPost()
        {
            // 在这里处理表单提交
            // 可以访问 this.Name 来获取用户输入的值
        }
    }
}
  • [BindProperty]
    : 这个属性告诉ASP.NET Core将表单中的
    Name
    字段绑定到
    Name
    属性。
  • OnPost()
    : 当表单提交时,会执行此方法。 你可以在这里处理表单数据。
  • this.Name
    : 在
    OnPost
    方法中,你可以通过
    this.Name
    访问用户输入的值。

你还可以使用不同的

OnPost
方法来处理不同的表单提交。 例如,你可以创建
OnPostSubmit1()
OnPostSubmit2()
方法,并在表单中使用不同的提交按钮来调用它们。

如何在Razor页面中使用依赖注入?

依赖注入是ASP.NET Core的核心特性之一,你可以在Razor页面中使用它来访问各种服务。 例如,假设你有一个服务叫做

IMyService

public interface IMyService
{
    string GetMessage();
}

public class MyService : IMyService
{
    public string GetMessage()
    {
        return "Hello from MyService!";
    }
}

首先,你需要在

Startup.cs
文件中注册这个服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddTransient<IMyService, MyService>();
}

然后,你可以在你的页面模型中使用构造函数注入来获取这个服务:

using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyWebApp.Pages
{
    public class MyPageModel : PageModel
    {
        private readonly IMyService _myService;

        public MyPageModel(IMyService myService)
        {
            _myService = myService;
        }

        public string Message { get; set; }

        public void OnGet()
        {
            Message = _myService.GetMessage();
        }
    }
}
  • private readonly IMyService _myService;
    : 声明一个私有只读字段来存储服务实例。
  • public MyPageModel(IMyService myService)
    : 使用构造函数注入来获取服务实例。
  • Message = _myService.GetMessage();
    : 在
    OnGet
    方法中调用服务方法。

最后,你可以在Razor页面中使用

Message
属性来显示服务返回的消息:

@page
@model MyWebApp.Pages.MyPageModel
@{
    ViewData["Title"] = "My Page";
}

<h1>@ViewData["Title"]</h1>

<p>@Model.Message</p>

总的来说,Razor页面提供了一种简洁高效的方式来构建ASP.NET Core Web应用。它简化了开发流程,并提供了强大的功能来处理各种Web开发任务。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

497

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

452

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3598

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2917

2024.08.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

25

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

44

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

174

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

50

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.3万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号