什么是RazorPage

我们都知道在Asp.Net MVC中,Razor是其一种视图引擎。而今天我们介绍的Razor Page却是一种web框架,它是一种简化的MVC框架,如果你曾经做过WebForm的开发者,你会发现,Razor Page有点类似Web Form,一个page,一个class。

大家或许会有疑惑,我们现在Asp.Net MVC已经很完善了,为何还需要出来一种新型的框架呢?在我看来,MVC确实已经足够强大了,只是因为太强大了,却变成了它的缺点。当我们的业务越来越庞大的时候,你是否觉得你的一个Controller内部已经凌乱不堪?当我们业务模块划分越多的时候,你是否会为你的Model创建而头疼呢?当我们创建一个新的View的时候,我们需要在MVC层增加1个View,1个Model,修改一个Controller,每当这个时候,我都会疑惑这不是违反Open-Closed Principle(对扩展开放,对修改关闭)了嘛!这个时候我会想起以前的webform,现在不需要了,我们有了Razor Page,一种更轻量级的MVC(我觉得更像MVVM)。

如何创建RazorPage

我们可以通过多种方式来创建Razor Page项目, 当然我还是建议您使用Visual Studio 2017(宇宙最强的IDE)。要创建Razor Page,你需要先安装.Net Core 2.0 SDK及以上版本(现在不区分core了 是.net6),如果要使用Visual Studio来创建,您还必须要更新到15.3版本以上

打开cmd或者powershell工具,先检查下你的dotnet 版本是否为2.0.0

dotnet –version

用Visual Studio 创建是非常方便的(宇宙最强IDE),不过我们必须要先升级到15.3,升级之后选择新建项目->. Asp.Net Core Web应用程序,接下来会弹出一个对话框,让我们选择模板类型:


通过上节我们创建了Razor Page项目,直接通过dotnet run或者在vs中F5运行。上文中我们说到,Razor Page的项目中,我们的关注点都在Pages目录下,在VS Explore中,我们看到在Index.cshtml的左边有一个三角箭头,点击就会看到Index.cshtml.cs文件,是不是感觉回到了webform。我们看下代码:

public class IndexModel : PageModel
{  public void OnGet(){}
}

因为我们的Index页面没有绑定任何数据,所以这里基本上只继承了PageModel,OnGet方法是个约定,查看mvc的源码你会发现它会获取On{handler}{Async}()。比如OnGet,它会在Get Index的时候被执行,我们可以通过这个约定进行数据绑定,这里知道下在Razor Page下HttpMethod也是一个handler,所以Razor Page的处理方式是通过handler进行的。

举个例子,我们在IndexModel中添加一个String类型的属性Message,在OnGet中进行赋值:
public void OnGet()
{
Message = “this is a test!”;
}

然后我们修改下Index.csthml:

@page
@model IndexModel    //这个指令使得cshtml.cs文件中的IndexModel类,在这个Razor Page中有效
@{ViewData["Title"] = "Home page"; //你可以在Razor Page页面中设置ViewData的键值,在_Layout.cshtml模版页面中使用你设置的ViewData
}<div class="row">Message : @Model.Message</div>

运行下,如果我们在页面上看到Message : this is a test!,说明赋值成功。

是不是很方便,一般我们的web基本上百分之八十在Get和Post,特别情况会出现其他HttpMethod,当然我们的RazorPage也支持,不过不建议。

现在来说PageModel就是一个Model,Action,HttpMethod的合体,对于Controller使用文件自己的路径+文件名的方式,比如原先我们的HomeController,默认情况下我们可以通过’/’访问也可以通过’/Home/’ 访问,这其实有歧义的,为了避免这种情况,我们必须去修改Route,非常不方便,而现在,我们只需要在Pages主目录下创建相应的Action就可以了,微软提供了Razor Page的对应Url关系,如图:

参考:
https://mp.weixin.qq.com/s?src=11&timestamp=1632386402&ver=3331&signature=uYeN7R9*G0W9icH3ziJ8hPd5nu5olN1q5dTvrgWjloGdmZwdGq0V5h3FTZ73XRUWX7gnoNbKIyo4d1WhR16zLItZEva5jVthEFH2Nkz-sEMc9xOHDnLV14iE4bW0iZQs&new=1

RazorPage介绍(一)相关推荐

  1. .Net Core应用框架Util介绍(三)

    上篇.Net Core应用框架Util介绍(二)介绍了Util的开发环境,并让你把Demo运行起来.本文将介绍该Demo的前端Angular运行机制以及目录结构. 目录结构 在VS上打开Util De ...

  2. Razor Page–Asp.Net Core 2.0新功能 Razor Page介绍

    Razor Page介绍 前言 上周期待已久的Asp.Net Core 2.0提前发布了,一下子Net圈热闹了起来,2.0带来了很多新的特性和新的功能,其中Razor Page引起我的关注,作为web ...

  3. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  4. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  5. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  6. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  7. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  8. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  9. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  10. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

最新文章

  1. python使用字典格式化字符串-如何在python-3.x中使用字典格式化字符串?
  2. Mysql索引底层实现
  3. 【PC工具】如何简单粗暴无脑的解方程
  4. 【频谱分配】基于频谱空洞预留算法的频谱分配算法的matlab仿真
  5. 2012 IBM软件技术峰会:IBM与开发者谈四大热门领域看法
  6. Java Socket实现客户端服务端之间的通信
  7. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第零节:MYSQL环境安装和表的建立以及一些注意事项
  8. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)
  9. 如何给一家公司做定性研究?
  10. Effective C# 学习笔记 (一)
  11. JAVA文件传输程序
  12. 魔方矩阵c语言,C语言 检验并打印魔方矩阵 在下面的5×5魔方矩阵中,每一行、每一列、...
  13. 超酷!Python 绘制属于你的世界地图
  14. 什么是软件开发生命周期?
  15. FFT运算的加深理解——频谱泄露
  16. linux 如何重建mbr,双系统如何删除Linux,恢复Windows从MBR引导启动?
  17. KUBERNETES安装及访问web页面
  18. 易观数科代码埋点、全埋点、可视化埋点
  19. 代换密码的密码分析—详细分析过程
  20. Zabbix自动发现规则

热门文章

  1. libxml主要函数说明 (一)
  2. 火狐查看html的隐藏域,IE/火狐/Chrome操作display:none对象所遇问题解答
  3. rabbitmq使用_RabbitMQ 简介以及使用场景
  4. 感知机(Perceptron)为什么不能表示异或(XOR)
  5. TensorFlow 安装教程
  6. python做后端速度慢吗_【后端开发】python如何提高运行速度
  7. ZOJ1002-Fire Net(深度优先搜索)
  8. 【数据结构】----将一个链表拆分为两个链表
  9. 传递集合对象_【Java学习笔记(九)】之集合的要点介绍
  10. c语言四个零,输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1...