我们将使用Visual Studio 2019使用 Razor Pages 创建新的Web应用程序。以下是步骤。
启动Visual Studio 2019
单击“ 创建新项目”选项。
在随后的屏幕上,选择“ ASP.NET Core Web应用程序”模板,然后单击“ 下一步”。在下一个屏幕上,为项目提供一个名称。我命名了
YoYoMooc.StudentManagement.RazorPage
,然后点击下一步。
然后在配置新项目的过程中,选择我们需要的.NET 版本,这里我们选择使用.NET 6的版本,然后在其中创建项目的位置,然后单击“ 创建”按钮。
//todo: 需要检查.NET 6图片
Razor Pages的视图文件均位于Web应用程序根文件夹中的Pages
文件夹中,如下图完整的项目结构如下
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
```
Index.cshtml是显示模板,扩展名为.cshtml。它很像MVC中的Razor视图文件。@page指令指定它是一个 Razor Pages 。@model指令指定模型。该模型是对应的PageModel类,如下所示。
### Index.cshtml.cs
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
}
* Index.cshtml.cs是相应的PageModel类。
* 它与显示模板具有相同的名称,并以.cs扩展名结尾。
* 为什么是CS结尾,因为编程语言是CSHARP。
* 该文件中的类是显示模板的模型。它从PageModel类派生。
* 就像MVC一样, Razor Pages 也支持依赖项注入。
* 内置的ILogger服务是使用构造函数注入的。
* 通过ILogger服务,我们可以记录到几个不同的记录目标。
* 除依赖注入和日志记录外, Razor Pages 还支持其他ASP.NET Core 功能,例如配置源,模型绑定,模型验证等功能这些在我们之前的课程以及说过了。
## Razor Pages中的Hello World
PageModel类(Index.html.cs)说明:
public class IndexModel : PageModel { public string Message { get; set; }
public void OnGet()
{
Message = "Hello World!";
}
}
```
注意,公共属性Message
需要通过@Model.Message
在显示模板中使用。
当我们运行该项目并导航到http://localhost:2221/index
时,我们会在浏览器中看到索引页面。同样,如果您有一个ContactUs.chtml
视图文件 ,并且导航到http://localhost:2221/ContactUs
,您将在浏览器中看到ContactUs页面。URL中不需要填写扩展名.CSHTML。
ASP.NET Core Razor Pages框架是一种新技术,可以通过清晰地分离关注点来更快,更高效地构建以页面为中心的Web应用程序。Razor Pages是在.NET Core 2.0中引入的。它轻巧,灵活,并为开发人员提供了对呈现的HTML的完全控制。
在某些方面, Razor Pages 类似于经典的ASP.NET Webforms框架。在ASP.NET Webforms中,我们有一个ASPX页和一个代码隐藏类。ASPX页面包含HTML并控制可视部分。后台代码类包含处理页面事件的服务器端c#或可视基本代码。
例如,如果您有一个名称为WebForm1的WebForm。它实际上是一对文件-WebForm1.aspx(显示模板)和WebForm1.aspx.cs(代码隐藏类)。
类似地,每个Razor Pages也是一对文件:.cshtml和.cshtml.cs。
MVC 是用于实现应用程序的用户界面层的架构设计模式
除了创建模型外,控制器还选择一个视图并将模型对象传递给该视图。该视图包含表示逻辑,以显示控制器提供的模型数据。
在MVC中,除了Model,View和Controller外,我们还有Actions和ViewModels。如果我们要构建一个相当复杂的门户网站,那么最终我们可能会得到使用许多不同依赖项和视图模型并返回许多不同视图的控制器。
简而言之,我们可能最终得到大型控制器,这些控制器具有许多彼此不相关的动作。这不仅导致不必要的复杂性,而且违反了编程的基本原则,例如单一职责原则和开放/封闭原则。,让代码显得臃肿。
另一方面, Razor Pages 只是一对文件-一个显示模板和相应的PageModel类。顾名思义,显示模板包含HTML。PageModel类包含服务器端代码,它结合了Controller和ViewModel的职责。
我们放在PageModel类中的所有内容都与Page有关。因此,与MVC中的控制器不同,使用用不相关的方法让PageModel类变得臃肿几乎是不可能的。
由于PageModel类和显示模板位于一个位置并且彼此密切相关,因此使用 Razor Pages 构建单个页面非常简单,同时仍使用ASP.NET Core MVC的所有体系结构功能,例如依赖项注入,中间件组件,配置系统,模型绑定,验证等。
因此,Microsoft的建议是,如果我们要构建Web UI(网页),则使用 Razor Pages ;如果我们要构建Web API,则使用ASP.NET Core MVC。
无论您使用ASP.NET Core MVC还是Razor Pages来构建Web应用程序,从性能的角度来看都没有什么区别。
在一些ASP.NET Core Web应用程序中,也可以将两种模式(即ASP.NET Core MVC和Razor Pages)组合在一起。
我个人认为ASP.NET Core 开发人员必须同时具备这两项技能-Razor Pages和MVC。因此,如果您开始学习ASP.NET Core,建议先从ASP.NET Core入门教程开始 然后再从 Razor Pages 教程开始。