ASP.NET Core - Razor 页面介绍
简介
随着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文件的一部分代码:
OnGetAsync
和OnPostAsync
是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 根文件夹中(可配置)
原文:《Intro toASP.NET Core Razor Pages》https://codingblast.com/asp-net-core-razor-pages/
翻译:Sweet Tang
本文地址:http://www.cnblogs.com/tdfblog/p/razor-pages-in-asp-net-core.html
欢迎转载,请在明显位置给出出处及链接。
ASP.NET Core - Razor 页面介绍的更多相关文章
- ASP.NET Core - Razor 页面简介
简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面.在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面. Razor页面是ASP.NET Cor ...
- ASP.NET Core Razor页面禁用防伪令牌验证
在这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证. Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的.数据驱动的网站: ...
- ASP.NET Core Razor 页面使用指南
ASP.NET Core Razor 页面作为 ASP.NET Core 2.0的一部分发布,它是基于页面的全新的Web开发框架.如果您想学习如何使用 ASP.NET Core Razor 页面,可以 ...
- Asp.Net Core Razor页面中使用echarts展示图形
Asp.Net Core Razor页面中使用echarts展示图形 要在Razor页面中使用echarts显示图形,主要问题点在于如何将数据传递给js文件. 1,下载安装echarts库文件 首先引 ...
- ASP.NET Core Razor页面 vs MVC
作为.NET Core 2.0发行版的一部分,还有一些ASP.NET的更新.其中之一是添加了一个新的Web框架来创建"页面",而不需要复杂的ASP.NET MVC.新的Razor页 ...
- Asp.net core Razor 页面
创建asp.net core 空项目->MyWeb 修改Startup.cs启动文件添加Razor页面支持: public void ConfigureServices(IServiceColl ...
- ASP.Net Core Razor 页面路由
在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求.最简单的方法是将 URL 映射到磁盘上的物理文件,在 Razor 页面框架中, ...
- 4.将验证添加到 ASP.NET Core Razor 页面
向 Movie 模型添加了验证逻辑. 每当用户创建或编辑电影时,都会强制执行验证规则. 1.打开Movie.cs文件.DataAnnotations命名空间提供了一组内置的验证属性,这些属性以声明方式 ...
- ASP.NET Core 中的 Razor 页面介绍
标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...
随机推荐
- ERROR: 9-patch image C:\...\res\drawable\appwidget.9.png malformed. Frame pixels must be either solid or transparent (not intermediate alphas).
this is the problem with latest adt that is 20.0.3. you can instead rename the *.9.png to *.png and ...
- 【Spring源码解析】—— 依赖注入结合SpringMVC Demo-xml配置理解
在IOC容器初始化的梳理之后,对依赖注入做一个总结,就是bean实例化的过程,bean的定义有两种方式,一种是xml文件配置,一种是注解,这里是对xml配置文件的依赖注入的介绍,后续对bean与该部分 ...
- checkpoint防火墙SmartDashboard登录出错
SmartDashboard登录是报错:fingerprint不匹配 原因:主备机切换导致 解决:选择凌晨不影响业务的时间拔掉原备机的电源线.
- I2C与SMBus
关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写.交杂描述.交替运用. 确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上 ...
- 《AlwaysRun!团队》第二次作业:团队项目选题报告
第二次作业:团队项目选题报告 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblog ...
- xx星空面试题
一面 1.什么是多态 实现原理? 2.什么是重载?class加载原理? 3.常用设计模式,简单介绍 4.看过哪些java的书?android的书? 5.动态注册静态注册 优缺点?静态注册函数如何被调用 ...
- NC 创建表空间数据库
1.首先创建表空间 CREATE SMALLFILE TABLESPACE "NNC_DATA01" LOGGING DATAFILE 'D:\NCOracle\nc633sd\N ...
- WebService CXF知识总结
2018-10-23 <wsdl:service name="Iptv3aBasicService"> 客户端client信息,CXF会生成一个名为Iptv3ABasi ...
- ----regular expression in js----
正则表达式:Regular Expression,在代码中常简写为regex.regexp或RE)使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式. 搜索模式可用于文本搜索和文本替换. ...
- ajax用户是否存在
$(function(){ $("#username").blur(function(){ var usernameInput=$(this).val(); $.post( &qu ...