深入理解 C# Razor Pages:构建现代 Web 应用的利器

article/2025/6/7 12:05:27

在现代 Web 开发中,选择合适的框架至关重要。ASP.NET Core 提供了多种开发模式,其中 Razor Pages 因其简单性、高效性和易用性,成为构建页面导向 Web 应用的首选方案。相比于传统的 MVC(Model-View-Controller)模式,Razor Pages 提供了更直观的开发体验,特别适合中小型 Web 应用程序。

本文将深入探讨 Razor Pages 的核心概念、架构、使用方法,并通过实际示例展示如何构建一个完整的 Web 应用。

1. 什么是 Razor Pages?

Razor Pages 是 ASP.NET Core 中的一个 页面为中心的框架,它简化了 Web 开发流程。与 MVC 不同,Razor Pages 将 UI(视图)和逻辑(控制器) 紧密结合在一个单元中,使得代码更加模块化和易于维护。

1.1 Razor Pages 与 MVC 的区别

特性Razor PagesMVC
架构页面为中心,逻辑与视图结合分离的 Model-View-Controller
适用场景适合页面导向的应用(如仪表盘、表单)适合复杂业务逻辑的应用
路由基于文件路径(/Pages/Index.cshtml → /基于控制器和 Action
代码组织每个页面包含 .cshtml(视图)和 .cshtml.cs(逻辑)分离的 ControllersViews 和 Models

Razor Pages 的优势在于:

  • 更少的样板代码,减少 Controller 和 View 之间的耦合。

  • 更直观的路由,基于文件系统自动映射 URL。

  • 内置模型绑定和验证,简化表单处理。

2. Razor Pages 的基本结构

一个 Razor Page 通常由两个文件组成:

  1. .cshtml – 包含 HTML 和 Razor 语法(视图)。

  2. .cshtml.cs – 包含 PageModel 类(逻辑)。

2.1 示例:创建一个简单的 Razor Page

Pages/Index.cshtml

@page
@model IndexModel<h1>@Model.Message</h1>

Pages/Index.cshtml.cs

public class IndexModel : PageModel
{public string Message { get; set; }public void OnGet(){Message = "Hello, Razor Pages!";}
}
  • @page 指令表示这是一个 Razor Page。

  • @model 绑定 PageModel 类。

  • OnGet() 方法处理 HTTP GET 请求,并初始化数据。

访问 /Index 时,页面会显示 "Hello, Razor Pages!"

3. Razor Pages 的核心机制

3.1 路由机制

Razor Pages 默认基于文件路径映射 URL,例如:

  • Pages/Index.cshtml → /

  • Pages/Products/Index.cshtml → /Products

  • Pages/Products/Details.cshtml → /Products/Details

也可以自定义路由:

@page "/custom-route/{id:int}"

这样,URL /custom-route/5 会自动绑定 id=5

3.2 处理 HTTP 请求

Razor Pages 使用 命名约定 处理 HTTP 请求:

  • OnGet() → 处理 GET 请求

  • OnPost() → 处理 POST 请求

  • OnPut()OnDelete() 等(适用于 REST API)

示例:

public IActionResult OnPost()
{if (!ModelState.IsValid){return Page(); // 返回当前页面(验证失败)}return RedirectToPage("/Success"); // 重定向
}

3.3 模型绑定

Razor Pages 支持自动绑定表单数据:

方式 1:直接绑定

public IActionResult OnPost(string username, string password)
{// 直接接收表单字段
}

方式 2:使用 [BindProperty]

[BindProperty]
public UserInputModel Input { get; set; }public IActionResult OnPost()
{if (Input.Username == "admin"){// 处理逻辑}
}

这种方式更推荐,因为它支持 模型验证

4. Razor Pages 的常用功能

4.1 表单处理

<form method="post"><div><label asp-for="Input.Username"></label><input asp-for="Input.Username" /><span asp-validation-for="Input.Username"></span></div><div><label asp-for="Input.Password"></label><input asp-for="Input.Password" type="password" /><span asp-validation-for="Input.Password"></span></div><button type="submit">Login</button>
</form>
  • asp-for 实现模型绑定。

  • asp-validation-for 显示验证错误。

4.2 数据验证

public class UserInputModel
{[Required(ErrorMessage = "用户名不能为空")]public string Username { get; set; }[DataType(DataType.Password)][MinLength(6, ErrorMessage = "密码至少6位")]public string Password { get; set; }
}

如果验证失败,ModelState.IsValid 会返回 false,并自动显示错误信息。

4.3 依赖注入(DI)

Razor Pages 支持 依赖注入,可以轻松注入服务:

public class IndexModel : PageModel
{private readonly ILogger<IndexModel> _logger;public IndexModel(ILogger<IndexModel> logger){_logger = logger;}public void OnGet(){_logger.LogInformation("Page loaded");}
}

5. Razor Pages 的适用场景

  • CRUD 应用(如后台管理系统)

  • 表单密集型页面(如注册、登录)

  • 小型到中型 Web 应用

  • 需要快速开发的场景

如果项目需要复杂业务逻辑或 API 开发,可以考虑 MVC + Web API

6. 总结

Razor Pages 提供了一种 更简单、更直观 的方式来构建 Web 应用。它减少了 MVC 的复杂性,同时保持了强大的功能,如:
✔ 自动路由映射
✔ 内置模型绑定和验证
✔ 依赖注入支持
✔ 更少的样板代码

如果你正在寻找一个 高效、易维护 的 Web 开发框架,Razor Pages 绝对值得尝试!

 


http://www.hkcw.cn/article/ywcdXRodLF.shtml

相关文章

AgenticSeek 本地部署教程(Windows 系统)

#工作记录 Fosowl/agenticSeek&#xff1a;完全本地的 Manus AI。 部署排错参考资料在文末 或查找往期笔记。 AgenticSeek 本地部署教程&#xff08;Windows 系统&#xff09; 一、环境准备 1. 安装必备工具 Docker Desktop 下载地址&#xff1a;Docker Desktop 官网 安装后启…

后台管理系统八股

项⽬地址&#xff1a;https://github.com/Xiaodie-888/Frontend.git 前端 https://github.com/Xiaodie-888/backend.git 后端 技术栈&#xff1a;Vue3ViteTyprscriptPiniaElement-plusVue-RouterExpress.jsMySQL 核⼼⼯作与技术&#xff1a; 基础组件封装&#xff1a;基于 Ele…

014校园管理系统技术解析:构建智慧校园管理平台

校园管理系统技术解析&#xff1a;构建智慧校园管理平台 在教育信息化快速发展的当下&#xff0c;校园管理系统成为提升学校管理效率、优化校园服务的重要工具。该系统集成院校管理、投票管理等多个核心模块&#xff0c;面向管理员、用户和院内管理员三种角色&#xff0c;通过…

SpringBoot2.3.1集成Knife4j接口文档

首先要查看项目中pom文件里面有没有swagger和knife4j的依赖&#xff0c;如果有的话删除&#xff0c;加入以下依赖 <!-- swagger --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</…

Abaqus/CAE操作介面

Abaqus/CAE操作介面: • 完全整合建模、分 析、工作管理與結 果評估。 • 對於Abaqus的各系 統&#xff0c;提供最完善的 介面。 • 使用中立的資料庫 檔案&#xff0c;獨立於硬體 設備。 • 客製化&#xff0c;成為應用 於特定問題之系統 。 • 選 單 (menu) 、圖 標 (ico…

垂起固定翼无人机应用及技术分析

一、主要应用行业 1. 能源基础设施巡检 电力巡检&#xff1a;适用于超高压输电线路通道的快速巡查&#xff0c;实时回传数据提升智能运检效率。 油田管道监测&#xff1a;利用长航时特性&#xff08;1.5-2小时&#xff09;对大范围管道进行隐患排查&#xff0c;减少人力巡…

DPDK与网络协议栈

DPDK与网络协议栈 DPDK简介实现使用DPDK收发数据通过UDP收发数据通过 TCP 收发数据 DPDK简介 DPDK 是是 Intel 提供的数据平面开发工具集&#xff0c;为&#xff08;IA&#xff09;处理器架构下用户高效的数据包处理提供函数以及驱动支持&#xff0c;不同于 Linux 下是以通用性…

51c大模型~合集134

我自己的原文哦~ https://blog.51cto.com/whaosoft/13956141 #Foveated Instance Segmentation 解决XR算力瓶颈&#xff0c;FovealSeg框架实现毫秒级IOI分割 本文共同第一作者为纽约大学研究生 Hongyi Zeng 和Wenxuan Liu。合作作者为 Tianhua Xia、Jinhui Chen、Ziyun…

基于51单片机和8X8点阵屏、独立按键的填充消除类小游戏

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 使用的是普中A2开发板。 【单片机】STC89C52RC 【频率】12T11.0592MHz 【外设】8X8点阵屏、独立按键 效果查看/操作演示&#x…

openharmony5.0.0中kernel子系统编译构建流程概览(rk3568)

概述 在梳理openharmony对linux内核做了哪些更改时&#xff0c;简单梳理了下kernel部分的编译构建流程&#xff0c;并根据源码做了简单论证。分享出来&#xff0c;希望对大家有所帮助。 系统版本:openharmony5.0.0 开发板:dayu200 编译环境:ubuntu22 执行流程 在kernel\l…

web攻防之SSTI 注入漏洞

知识简介 &#xff1a; 模版引擎和框架的区别 ssti的中文翻译 &#xff1a; 服务端的模版的注入 模版引擎 &#xff1a;前端的用于装饰优化html的模版 最简单的就是在腾讯会议中的聊天功能 框架 &#xff1a; 这个是一套独立存在的逻辑 如TP他是一个区别于php语法的后端逻辑…

【Linux】Linux 进程基础

参考博客&#xff1a;https://blog.csdn.net/sjsjnsjnn/article/details/125533127 进程 1.基本概念 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体。 …

win32相关(内存映射文件)

内存映射文件 什么是内存映射文件 内存映射文件是一种将磁盘文件直接映射到进程地址空间的技术&#xff0c;允许应用程序像访问内存一样访问文件内容。这种机制提供了高效的文件I/O操作方法 #include<windows.h> #include<iostream>HANDLE hFile; HANDLE hMapFile;…

前端​​HTML contenteditable 属性使用指南

​​什么是 contenteditable&#xff1f; HTML5 提供的全局属性&#xff0c;使元素内容可编辑类似于简易富文本编辑器兼容性​​ 支持所有现代浏览器&#xff08;Chrome、Firefox、Safari、Edge&#xff09; 移动端&#xff08;iOS/Android&#xff09;部分键盘行为需测试 &l…

极智项目 | 基于PyQT实现的YOLOv12行人目标检测软件设计

基于YOLOv12的专业级行人目标检测软件应用 开发者: 极智视界 软件下载&#xff1a;链接 &#x1f31f; 项目特色 专业检测: 基于最新YOLOv12模型&#xff0c;专门针对行人检测优化现代界面: 采用PyQt5构建的美观、直观的图形用户界面高性能: 支持GPU加速&#xff0c;检测速…

[yolov11改进系列]基于yolov11引入可变形注意力DAttention的python源码+训练源码

【DAttention介绍】 DAT全称为Deformable Attention Transformer&#xff0c;其作用在于通过可变形注意力机制&#xff0c;同时包含了数据依赖的注意力模式&#xff0c;克服了常见注意力方法存在的内存计算成本高、受无关区域影响以及数据不可知等问题。相比一些只提供固定注意…

谷歌地图2022高清卫星地图手机版v10.38.2 安卓版 - 前端工具导航

谷歌地图2022高清卫星地图手机版是由谷歌公司推出的一款非常好用的手机地图服务软件&#xff0c;用户能够通过精准的导航和定位来查看地图&#xff0c;周边的商店等生活服务都会在地图上显示&#xff0c;用起来超级方便。 谷歌卫星高清地图 下载链接&#xff1a;夸克网盘分享 …

优化 Spring Boot API 性能:利用 GZIP 压缩处理大型有效载荷

引言 在构建需要处理和传输大量数据的API服务时&#xff0c;响应时间是一个关键的性能指标。一个常见的场景是&#xff0c;即使后端逻辑和数据库查询已得到充分优化&#xff0c;当API端点返回大型数据集&#xff08;例如&#xff0c;数千条记录的列表&#xff09;时&#xff0…

对接系统外部服务组件技术方案

概述 当前系统需与多个外部系统对接,然而外部系统稳定性存在不确定性。对接过程中若出现异常,需依靠双方的日志信息来定位问题,但若日志信息不够完整,会极大降低问题定位效率。此外,问题发生后,很大程度上依赖第三方的重试机制,若第三方缺乏完善的重试机制,就需要手动…

sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境

sudo docker exec -it backend bash&#x1f50d; 总体作用 这条命令的作用是&#xff1a; 以交互方式&#xff08;interactive&#xff09;进入名为 backend 的正在运行的 Docker 容器的命令行环境。 你会进入容器的“终端”&#xff0c;就像登录到一个 Linux 系统一样&#…