前言

在 ASP.NET Core – MVC vs Razor Page 里有提到 MVC. 它算是 WebAPI 的抽象.

但是通常 MVC 指的是比较传统的 Website, WebAPI 则是前后端分离的方案. Razor Page 则是替代 MVC 做 Website 的.

虽然说替代, 但是也不是 100%, 有些场景用 MVC 会比较直观. 这篇就特别来讲一下.

Get Started

dotnet new mvc -o TestMvc

folder 结构

可以 1 Controller 多个 Action, 每一个 Action 对一个 View, 或者 1 Controller 1 Action 对 1 个 View (看想怎样管理)

Controller 找 View

找 View 是有 default path 逻辑的, 也可以自定义. 但这里我就不多介绍了. 因为我使用场景很少, 所以都是直接写 path.

return View("~/PathToView/Index.cshtml", viewModel);

职责

Razor Page 的入口是 View .cshtml 然后引入 Model.cs (这个 Model 又包含了 Init 方法, 所以它算是 Model + Controller 概念)

MVC 的入口是 Controller + Action (.cs) 然后通过 ViewModel passing 资料给 View.

Razor Page View = MVC View

Razor Page Model Init = MVC Controller Action

Razor Page Model = MVC ViewModel

Route

上面讲了 Controller Action 和 View 的关系. 现在讲 Route.

Razor Pages 是通过 View 里面的 @page "url" 来定义 route 的.

MVC 则是直接在 Program.cs 里声明

pattern 可以写一些表达式, 上面的意思是

第一个 segment 对应 controller 名字,

第二个对应 action

第三个是一个 optional 的 RouteData

同时如果 3 个 segment 都是空, 那么就匹配 default 的 Home Index

使用场景

我遇到的场景是这样的

有 services 和 products.

一种做法是 /services, /categories 作为所以 services 和 product categories 页面

然后 /services/service1, /category1/product1 作为 service/product detail 页面.

但是这个项目不打算做 /services 和 product categories 页面.

而是直接让用户去 /service1 或者 /category1

service1 和 category1 是来自 SQL 的 data. route 匹配的写法就是 /{service-or-category}

然后 service 和 category 的页面是不同的设计.

这种情况下, 用 Razor Page 就不太合适了.

因为 same route 但是不同 View. 而 Razor Page 的特色是 1 个 View match 1 个 Route.

所以这里就可以用 MVC 的方式, Route match 了进入 Controller, 然后判断是 service 还是 category 然后输入 service view 或者 category view.

这个做法就比较直观了.

ASP.NET Core – MVC的更多相关文章

  1. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  2. ASP.NET Core MVC 配置全局路由前缀

    前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应用背景 不知道大家在做 Web Ap ...

  3. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  4. ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

    原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...

  5. ASP.NET Core 中文文档 第二章 指南(4.1)ASP.NET Core MVC 与 Visual Studio 入门

    原文:Getting started with ASP.NET Core MVC and Visual Studio 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:刘怡(Alex ...

  6. ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览

    原文:Overview of ASP.NET Core MVC 作者:Steve Smith 翻译:张海龙(jiechen) 校对:高嵩 ASP.NET Core MVC 是使用模型-视图-控制器(M ...

  7. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源

    ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...

  8. ASP.NET Core MVC 在linux上的创建及发布

    前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...

  9. ASP.NET Core - ASP.NET Core MVC 的功能划分

    概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...

  10. 解决ASP.NET Core Mvc文件上传限制问题

    一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传 ...

随机推荐

  1. 第二章 编译FFmpeg并开启H.264编码

    目录 前言 1. 下载x264 2. 编译x264 3. 编译FFmpeg 3.1 可能出现的问题和解决方法 3.1.1 ERROR: x264 not found using pkg-config ...

  2. 学习笔记--Java中this关键字

    Java中this关键字 关于Java语言中的this关键字 this 是一个关键字,翻译为:这个 this 是一个引用,一个变量,this变量中保存的内存地址指向自身 每一个对象都有自己的this, ...

  3. 全网最好看的单细胞umap图绘制教程

    全网最好看的单细胞umap图绘制教程 作者按 大家或许都曾被Nature, Science上的单细胞umap图吸引过,不免心生崇拜.在这里,我们将介绍一种简单方便的顶刊级umap图可视化 全文字数|预 ...

  4. Aug. 2024 杭二训练游记

    \(\text{前言}\) 我在 \(\text{Aug. 6th}\) 到 \(\text{Aug. 25th}\) 在杭州某知名中学集训,但是我亲爱的母亲却在一开始告诉我是 \(\text{Aug ...

  5. 记hashmap

    hashmap是map接口的一个实现类,在同步的情况下hashmap的性能是比较好的 hashmap就是一个kv键值对的集合,将数值散列均匀的存储在哈希表中.插入方法为map.put(k,v),读取方 ...

  6. 一个基于 SourceGenerator 生成 从 dbReader转换为 class 数据的性能测试实验

    好奇 SourceGenerator 出现开始,好几年了,虽然一直好奇用SourceGenerator 生成代码 与 emit 等动态生成的代码会有多少差距, 但是一直特别懒,不想搞 其实 dappe ...

  7. 【Java】匿名表达式 + 构造块

    来源自同事的一个代码截图 可以看见最后一行装填HashMap的语法非常的不常见 在我整理思绪之后才明白这语法是使用了 匿名内部类 + 对象构造代码块 一般使用场景是发生在容器对象的创建上,因为有些时候 ...

  8. 【Tutorial C】04 基本输入输出

    输出单个字符 putchar('a'); // 字符输出函数,其功能是在终端(显示器)输出单个字符. putchar('\n'); // 支持转义换行 putchar(77); // 可以直接注入AS ...

  9. 【Layui】13 轮播 Carousel

    文档地址: https://www.layui.com/demo/carousel.html 基础轮播: <style> /* 为了区分效果 */ div[carousel-item]&g ...

  10. openAI的仿真环境Gym Retro的Python API接口

    如题,本文主要介绍仿真环境Gym Retro的Python API接口 . 官网地址: https://retro.readthedocs.io/en/latest/python.html ===== ...