解释 Razor 页面如何在 ASP.NET Core 中工作
RazorPages通过采用基于文件的路由来简化传统的基于MVC的编程模型。RazorPages专注于基于页面的场景来构建Web应用程序,而不是像传统的ASP.NETMVC应用程序那样使用控制器和视图。
一旦应用程序接收到一个HTTP请求,它就会通过中间件管道,直到它到达一个可以处理和处理它的中间件组件。通常,它是一个路由中间件,它将URL路径与配置的路由相匹配。此路由定义要为此特定请求调用哪个Razor页面。
一旦路由器选择了Razor页面,框架就会执行该Razor页面以生成最终的HTML响应。然后,此响应返回到发出请求的客户端浏览器。
RazorPages文件是Pages文件夹中的.cshtml文件,类似于ASP.NETMVC应用程序中的View文件。每个视图都有一个关联的C#对象。该对象称为页面模型,它为页面的行为建模。通常,路由器通过在Pages文件夹中查找具有相同路径的Razor页面,将请求URL映射到单个Razor页面。
示例
@page @model IndexModel @{ ViewData["Title"] = "Home page"; }Welcome
Learn about building Web apps withASP.NETCore.
在上面的代码片段中,@page指令指示该页面是Razor页面。第二行将Razor页面链接到PageModelIndexModel。接下来,在@块内,我们有C#代码,无需将任何HTML写入响应即可执行。我们还可以使用动态C#代码在Razor页面中呈现HTML和普通的旧静态HTML。
Razor页面具有布局、定义应用程序公共元素(例如页眉和页脚)的基本模板。将此布局HTML添加到Razor页面HTML以生成完整的HTML响应,从而防止重复代码。
PageModel类是RazorPage的“代码隐藏”,它执行实际繁重的工作,例如处理业务逻辑、发出外部请求、从数据库中获取数据等。所有PageModel类都派生自PageModel基类。它们还提供一个或多个页面处理程序,它们只是定义如何处理对Razor页面的请求的方法。
例如,这里是上述RazorPage的PageModel。
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; namespace Razor.Pages{ public class IndexModel : PageModel{ private readonly ILogger_logger; public IndexModel(ILogger logger){ _logger = logger; } public void OnGet(){ } } }
这些页面处理程序使用基于约定的命名,即页面处理程序的名称基于它们响应的HTTP动词。根据应用程序逻辑,处理程序可以返回void,它告诉Razor页面返回HTML视图或以IActionResult的形式返回其他数据。
RazorPages完成的重要事情是它们将视图生成逻辑与实际数据计算或业务逻辑分开。这遵循关注点分离原则并保持应用程序的可维护性。如果您需要更改UI,则无需修改业务逻辑即可完成,反之亦然。