目录
一. 创建项目
二. 检查项目文件
三. 添加模型
四. 添加数据
五. 基架
六. 使用数据库
七. 总结
一. 创建项目
新建项目
点击运行
二. 检查项目文件
Pages 文件夹
包含 Razor 页面和支持文件。 每个 Razor 页面都是一对文件:
- 一个
.cshtml
文件,其中包含使用 Razor 语法的 C# 代码的 HTML 标记。- 一个
.cshtml.cs
文件,其中包含处理页面事件的 C# 代码。支持文件的名称以下划线开头。 例如,
_Layout.cshtml
文件可配置所有页面通用的 UI 元素。_Layout.cshtml
设置页面顶部的导航菜单和页面底部的版权声明。 有关详细信息,请参阅 ASP.NET Core 中的布局。
wwwroot 文件夹
包含静态资产,如 HTML 文件、JavaScript 文件和 CSS 文件。 有关详细信息,请参阅 ASP.NET Core 中的静态文件。
appsettings.json
包含配置数据,如连接字符串。 有关详细信息,请参阅 ASP.NET Core 中的配置。
Program.cs
创建一个带有预配置默认值的
WebApplicationBuilder
,向依赖关系注入 (DI) 容器添加 Razor Pages 支持,并生成应用.
下列代码会启用各种中间件:
app.UseHttpsRedirection();
:将 HTTP 请求重定向到 HTTPS。app.UseStaticFiles();
:使能够提供 HTML、CSS、映像和 JavaScript 等静态文件。 有关详细信息,请参阅 ASP.NET Core 中的静态文件。app.UseRouting();
:向中间件管道添加路由匹配。 有关详细信息,请参阅 ASP.NET Core 中的路由app.MapRazorPages();
:为 Razor Pages 配置终结点路由。app.UseAuthorization();
:授权用户访问安全资源。 此应用不使用授权,因此可删除此行。app.Run();
:运行应用。
三. 添加模型
新建一个文件夹Models
新建一个Movie.cs
using System.ComponentModel.DataAnnotations;
namespace WebRazor.Models
{
public class Movie
{
public int Id { get; set; }
public string? Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string? Genre { get; set; }
public decimal Price { get; set; }
}
}
Movie
类包含:
数据库需要
ID
字段以获取主键。[DataType] 属性,用于指定
ReleaseDate
属性中的数据类型。 通过此特性:
- 用户无需在日期字段中输入时间信息。
- 仅显示日期,而非时间信息。
string
后的问号表示属性可为空
创建“Pages/Movies”文件夹
右键单击 Pages/Movies 文件夹 >“添加”>“已搭建基架的新项”。
在“添加新基架”对话框中,依次选择“使用实体框架的 Razor Pages (CRUD)”>“添加”。
完成“添加使用实体框架的 Razor 页面 (CRUD)”对话框:
- 在“模型类”下拉列表中,选择“Movie (WebRazor.Models)” 。
- 在“数据上下文类”行中,选择 +(加号)。
- 在“添加数据上下文”对话框中,生成类名 WebRazor
.Data.
WebRazorContext
。- 在“数据库提供程序”下拉列表中,选择“SQL Server”。
- 选择 添加 。
点击添加
四. 添加数据
输入以下命令
Add-Migration InitialCreate
Update-Database
运行应用并将 /Movies
追加到浏览器中的 URL
点击 Create
五. 基架
@page 指令
@page
Razor 指令将文件转换为一个 MVC 操作,这意味着它可以处理请求。@page
必须是页面上的第一个 Razor 指令。@page
和@model
是转换为 Razor 特定标记的示例。
@model
指令指定传递到 Razor 页面的模型类型。 在前面的示例中,@model
行使PageModel
派生的类可用于 Razor 页面。
OnGet
方法初始化页面所需的任何状态。 “创建”页没有任何要初始化的状态,因此返回Page
。 在本教程的后面部分中,将介绍OnGet
初始化状态的示例。Page
方法创建用于呈现Create.cshtml
页的PageResult
对象。
Movie
属性使用 [BindProperty] 特性来选择加入模型绑定。 当“创建”表单发布表单值时,ASP.NET Core 运行时将发布的值绑定到Movie
模型。当页面发布表单数据时,运行
OnPostAsync
方法:
六. 使用数据库
主要代码
builder.Services.AddDbContext<WebRazorContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("WebRazorContext") ?? throw new InvalidOperationException("Connection string 'WebRazorContext' not found.")));
ASP.NET Core 配置系统会读取 ConnectionString
键。 进行本地开发时,配置从 appsettings.json
文件获取连接字符串。
右键查看数据
七. 总结
一、核心概念与特点
- 页面模型:
- Razor Pages 采用了以页面为中心的开发模式。每个 Razor Page 由一个
.cshtml
文件(包含页面的视图部分,即 HTML 结构和 Razor 语法)和一个对应的.cs
文件(包含页面的后台代码逻辑)组成。这种结构使得页面的视图和逻辑紧密结合,方便开发者进行页面级别的开发和维护。例如,一个简单的登录页面Login.cshtml
及其对应的Login.cs
文件,在.cshtml
文件中可以定义登录表单的 HTML 结构,而在.cs
文件中处理表单提交的验证和用户认证逻辑。 - 它简化了基于页面的 Web 应用开发,特别适合小型到中型规模的项目或那些更注重页面级功能的应用。与传统的 MVC 架构相比,Razor Pages 对于简单的页面操作减少了一些概念上的复杂性,开发者可以更专注于单个页面的功能实现。
- Razor Pages 采用了以页面为中心的开发模式。每个 Razor Page 由一个
- 路由与页面导航:
- Razor Pages 有自己的路由机制,页面的 URL 与页面文件的结构和名称有一定的关联。这使得页面的路由更加直观,不需要像在 MVC 中那样通过控制器和动作的复杂映射来确定 URL。例如,一个位于
Pages/Users/Edit.cshtml
的页面,其默认的路由可能是/Users/Edit
。这种直观的路由方式使得开发者更容易理解和管理页面的 URL 结构,方便进行页面之间的导航。 - 页面之间的导航可以通过 HTML 链接、表单提交等方式实现,并且可以方便地传递参数。比如从一个用户列表页面点击某个用户的编辑链接,导航到用户编辑页面并传递用户的 ID 作为参数,在编辑页面中就可以根据这个 ID 加载相应的用户数据进行编辑操作。
- Razor Pages 有自己的路由机制,页面的 URL 与页面文件的结构和名称有一定的关联。这使得页面的路由更加直观,不需要像在 MVC 中那样通过控制器和动作的复杂映射来确定 URL。例如,一个位于
- 数据绑定与验证:
- 在 Razor Pages 中,可以方便地进行数据绑定。页面模型可以直接与表单数据进行绑定,使得从用户输入获取数据并在后台代码中处理变得简单。例如,在一个创建用户的页面中,表单中的输入字段可以直接绑定到页面模型中的属性,当表单提交时,这些数据会自动填充到相应的属性中,方便后续的处理。
- 它还提供了内置的验证功能。开发者可以通过数据注解等方式在页面模型的属性上定义验证规则,当表单提交时,框架会自动根据这些规则进行验证。如果验证失败,会自动显示相应的错误信息给用户,提高了数据输入的准确性和用户体验。例如,在一个用户注册页面中,可以通过
[Required]
等数据注解来确保用户名和密码等字段不能为空,通过[EmailAddress]
注解来验证电子邮件格式是否正确。
二、开发流程与优势
- 开发流程:
- 创建项目:通过 Visual Studio 等开发工具可以快速创建一个 Razor Pages 项目模板,项目结构会自动包含必要的文件夹和文件,如
Pages
文件夹用于存放 Razor Page 文件,wwwroot
文件夹用于存放静态资源等。 - 页面开发:在
Pages
文件夹中创建新的 Razor Page 文件,编写.cshtml
文件中的 HTML 结构和 Razor 语法,以及对应的.cs
文件中的后台代码逻辑。可以利用内置的标签助手和 Razor 语法快速构建页面内容和处理业务逻辑。 - 数据访问与处理:可以通过 Entity Framework Core 等数据访问技术与数据库进行交互。在页面的后台代码中,可以编写数据查询、插入、更新和删除等操作的代码,将数据从数据库中获取并展示在页面上,或者将用户输入的数据保存到数据库中。
- 测试与部署:可以编写单元测试来测试 Razor Pages 的功能。在测试中,可以模拟 HTTP 请求并验证页面的响应是否符合预期。部署时,可以将应用程序部署到 IIS、Azure 等各种服务器或云平台上,利用 ASP.NET Core 的跨平台特性,实现灵活的部署方式。
- 创建项目:通过 Visual Studio 等开发工具可以快速创建一个 Razor Pages 项目模板,项目结构会自动包含必要的文件夹和文件,如
- 优势:
- 快速开发:对于简单的页面导向型应用,Razor Pages 提供了一种简洁高效的开发方式。开发者可以快速创建和维护页面,减少了不必要的代码文件和配置。相比传统的 MVC 架构,在一些简单场景下开发效率更高,特别是对于不熟悉复杂架构的开发者来说更容易上手。
- 良好的代码组织:页面相关的视图和逻辑代码集中在一个地方,使得代码的组织更加清晰。每个页面都有自己独立的代码文件,便于理解和维护。这对于团队开发尤其有利,不同开发者可以专注于不同的页面开发,减少代码冲突和混乱。
- 与 ASP.NET Core 框架的集成:Razor Pages 是 ASP.NET Core 的一部分,充分利用了 ASP.NET Core 的各种特性和功能,如依赖注入、中间件、安全等。开发者可以方便地在 Razor Pages 应用中使用这些功能,实现功能丰富、安全可靠的 Web 应用。例如,可以轻松地在页面中集成身份验证和授权功能,保护页面的访问安全。
总之,ASP.NET Core Razor Pages Web 应用提供了一种简洁、高效且具有良好代码组织的开发方式,适用于多种规模的 Web 应用开发,尤其在页面导向型应用中具有独特的优势,能够帮助开发者快速构建功能完善的 Web 应用。