简介

随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面。在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面。

Razor页面是ASP.NET Core的一个新功能,可以使基于页面的编程方式更容易,更高效。

大众的初步印象是对于那些只专注于页面的小型应用来说,Razor页面更容易、更快地取代MVC。然而,事实证明,它可能比这更强大。使用ASP.NET Core 2在创建新的应用程序时,Razor页面(空,Razor页面,Web API,MVC)是默认选项,似乎ASP.NET团队对Razor页面有更多的计划,并希望它成为创建Web应用程序时首选。

所有的Razor页面类型和特征都在Microsoft.AspNetCore.Mvc.RazorPages程序集中,MVC默认包Microsoft.AspNetCore.Mvc已经包含了Razor页面组件,这意味着您可以在MVC应用程序中直接使用Razor页面。

Razor页面的优点之一是设置和创建非常容易。您创建一个新的空项目,添加Pages文件夹,添加页面,只需在 .cshtml 文件中编写代码和标记。非常适合新手,是学习ASP.NET Core简单快速的方法!

Why?

如果您想使用MVC构建几个简单的页面,你需要将控制器 Action、HTML视图、视图模型、路由分别在单独的位置编写,这看起来似乎很过分了。

在Razor页面中,只有一个Razor文件(.cshtml),后台的代码也位于该文件内,该文件也表示应用程序的URL结构(稍后将会介绍)。因此,您可以将所有内容都放在一个文件中,就这么简单。

但是,您可以使用 .cshtml.cs 扩展名文件将后台代码分开。通常在该文件中包括视图模型和Handlers (如MVC中的Acion方法),也可以在该文件中的处理逻辑。当然,您也可以将您的视图模型移动到单独的文件中。

创建Razor页面应用程序

在VS 2017中安装.NET Core 2 SDK的情况下,如果我们按照这样的方式:文件 - > 新建项目 - > Web - > ASP.NET Core Web应用程序,我们将得到下面的窗口:

手动将身份验证类型改为“个人用户帐户”。

我们也可以通过CLI实现同样的效果

dotnet new razor --auth Individual

在dotnet CLI创建一个新项目之后,我们将在的项目中得到以下结构:

首先注意到是没有Views文件夹, 如果没有选择"授权"选项, 那么也不会有"Controllers"文件夹。在我们的例子中,有AccountController控制器,在 Pages 文件夹中包含Account 文件夹。该文件夹的中,我们存放Razor页面,在MVC中这些代码通常放在 ~Views/Account 文件夹中:

页面的默认位置是"Pages"文件夹,但可以更改

大部分页面都附带.cs文件,表示页面的模型:

.cs文件中,我们可以定义我们的逻辑、Handlers(Action)、模型和所有需要的逻辑。我们也可以把它当作是.cshtml页面的粘合剂,仅处理GET / POST / PUT / DELETE,也可以将逻辑移到单独的类或层/项目中。

需要注意的一点是,我们需要在 .cshtml 文件的顶部定义   @page 指令。这告诉Razor这个 .cshtml 文件是Razor Page文件:

ASP.NET Core Razor页面 - 核心功能

由于Razor页面是MVC框架的一部分,我们可以在Razor页面中使用MVC所附带的任何功能。

模型绑定

在MVC中模型绑定也适用于Razor页面,就像MVC控制器中的Action方法一样,在Razor页面代码有Handlers 。

ChangePassword页面.cshtml文件编写如下表单:

ChangePassword.cshtml.cs文件中实现ChangePasswordModel类:

这里是InputModel类:

InputModel提供了我们在MVC中熟悉的ViewModel功能。

Handlers

我们使用Handlers作为处理HTTP请求(GET,POST,PUT,DELETE ..)的方法。例如,我们可以有以下方法:

  • OnGet / OnGetAsync

  • OnPost / OnPostAsync

  • OnDelete / OnDeleteAsync

这些方法将由ASP.NET Core根据HTTP请求的类型自动匹配。

让我们回到之前ChangePassword的示例。这是ChangePassword.cshtml.cs文件的一部分代码:

OnGetAsyncOnPostAsync是Razor页面 handlers约定好了的名称。一旦您打开ChangePassword页面,OnGetAsync handler 将执行,当您从ChangePassword.cshtml页面提交表单,OnPostAsync handler 将被触发。

此外,我们可以将所有的页面代码放在 .cshtml 文件中。例如,我们可以将这两个函数从ChangePassword.cshtml.cs文件移动到ChangePassword.cshtml中:

关键字   @functions 指令,它使Razor文件范围内的代码成为功能级方法。

Tag Helpers and HTML Helpers

我们还可以在Razor页面内使用所有现有的Tag Helpers 和HTML Helpers;此外,可以创建自定义的帮助类,并在Razor页面中使用它们。

路由

我在GitHub中的小项目设置演示了如何使用Razor页面进行CRUD - 仓库链接 。您需要.NET Core 2.0 preview 3(build 6764 才能正常运行)或更高版本以及Visual Studio 2017.3或更高版本。

以下是所有文件的项目结构:

除了两个标准文件 Program.cs 和 Startup.cs ,一切都在Pages文件夹中;请注意,某些页面具有匹配的后台代码文件。

如前所述,项目中页面的位置(文件系统中的路径)将确定匹配的URL。

这里是一些重要页面文件和路由匹配的列表:

页面文件路径 匹配的URL
~Pages/Index.cshtml / , /Index
~Pages/Categories/Index.cshtml /Categories , Categories/Index
~Pages/Categories/Edit.cshtml /Categories/Edit/1
~Pages/Categories/Create.cshtml /Categories/Create

总结

  • Razor页面是以网页为重点的Web编程方式

  • 您可以(如果您想)在一个文件中实现所有的代码和HTML

  • Razor页面文件的路径决定了您的页面的URL/路由

  • 不是老的ASP.NET网页的新实现

  • 在MVC中可以使用的的功能,我们也可以Razor页面中使用:

    • 模型绑定

    • Razor支持

    • Tag Helpers

    • HTML Helpers

    • Handlers (Action方法)

    • 等等...

  • 我们有(OnGet,OnGetAsync,OnPostAsync等)Handlers

  • 文件系统(项目结构)中的页面位置决定URL路径

  • 需要一个根文件夹

  • 默认存储在 Pages 根文件夹中(可配置)

ASP.NET Core - Razor 页面介绍相关推荐

  1. ASP.NET Core Razor 页面使用教程

    ASP.NET Core Razor 页面作为 ASP.NET Core 2.0的一部分发布,它是基于页面的全新的Web开发框架.如果您想学习如何使用 ASP.NET Core Razor 页面,可以 ...

  2. ASP.NET Core Razor页面禁用防伪令牌验证

    这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证. Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的.数据驱动的网站:支 ...

  3. ASP.Net Core Razor 页面路由

    在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求.最简单的方法是将 URL 映射到磁盘上的物理文件,在 Razor 页面框架中, ...

  4. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第四部分

    目录 介绍 背景 使用代码 添加项目和项目技能处理 下载QuantumWeb-4.zip - 1.3 MB 介绍 这是一篇由多部分组成的文章的第四部分,演示了通过EntityFramework Cor ...

  5. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分

    目录 介绍 使用代码 添加项目和项目状态处理 下载源文件 - 989.1 KB 介绍 这是一篇由多部分组成的文章的第三部分,演示了通过EntityFramework Core 2.1(EF)将C#en ...

  6. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第二部分

    目录 介绍 使用代码 完整的客户CRUD 客户创造 显示客户详情 编辑客户信息 删除客户记录 完整的初始化CRUD页面 下载源代码(QuantumWeb) 介绍 这是一篇由多部分组成的文章的第二部分, ...

  7. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第一部分

    目录 介绍 背景 开发环境 使用代码 开始构建UI和数据访问 EF迁移和数据库创建 摘要 创建初始对象模型和数据库并显示第一个Razor页面 下载源码(QuantumWeb) 介绍 这是一篇由多部分组 ...

  8. ASP.NET Core Razor页面 vs MVC

    作为.NET Core 2.0发行版的一部分,还有一些ASP.NET的更新.其中之一是添加了一个新的Web框架来创建"页面",而不需要复杂的ASP.NET MVC.新的Razor页 ...

  9. ASP.NET Core Razor 视图组件

    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...

最新文章

  1. php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)
  2. Python远程连接服务器
  3. html表单标签怎么使用,HTML的表单标签使用
  4. 计算机如何用计算机语言显示汉字,计算机是如何执行程序的呢?什么是编程语言?中国怎么不用中文编程?...
  5. window下git的使用
  6. shell part2
  7. 用74LS161构建多位计数器Multisim仿真实验
  8. 03_SpringCloud整合Ribbon实现负载均衡
  9. 简单async/wait使用样例
  10. centos mysql自动补全_MyCLI :一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端
  11. c++程序设计(第三版) pdf_【好课传送】C++语言程序设计基础入门视频
  12. python y轴倒转_python – Config Kivy y轴的反转输入
  13. chat后缀域名_.chat域名简介
  14. win10初始化这台电脑——找不到恢复环境
  15. {转]太经典了,我不得不收藏
  16. 帝国cms 自定义页面 php,帝国CMS增加自定义页面模板修改教程
  17. 小马智行将在北京开启公共道路无人驾驶测试
  18. 用递归方法实现二分查找,为了避免异常情况,首先判断上下限范围
  19. no matching provisioning profile found
  20. Openstack采用ISO格式文件创建云主机

热门文章

  1. context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系
  2. Briefly unavailable for scheduled maintenance message after doing automatic upgrade
  3. Android延时执行调用的几种方法
  4. MongoDB 权限认证
  5. 【python】抄写大神的百度贴吧代码
  6. Apache-Jmeter监控服务资源
  7. 【配置文件】大家来谈谈这个log4j到底有什么用?
  8. 用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)
  9. WPF 实现倒计时转场动画~
  10. EFCore之命令行工具