关于 razor,.NET MVC 对 razor 的支持与 .NET razor pages 有啥区别,有啥叫做 .NET MVC razor pages 的东西吗?
Posted
技术标签:
【中文标题】关于 razor,.NET MVC 对 razor 的支持与 .NET razor pages 有啥区别,有啥叫做 .NET MVC razor pages 的东西吗?【英文标题】:With regards to razor, what is difference between .NET MVC support for razor vs .NET razor pages and is there anything called .NET MVC razor pages?关于 razor,.NET MVC 对 razor 的支持与 .NET razor pages 有什么区别,有什么叫做 .NET MVC razor pages 的东西吗? 【发布时间】:2021-12-30 19:35:24 【问题描述】:.NET 目前有 5 种方法来构建通过访问服务器生成内容的网站:
.NET 框架 4.8 - MVC(出于本问题的目的忽略此) .NET 框架 4.8 - Web 表单(出于本问题的目的忽略此) .NET MVC 支持剃刀 .NET Razor 页面 Blazor(出于本问题的目的忽略此)问题 1: 我想了解 - 关于 razor 的概念,.NET MVC 支持 razor 与 .NET razor 页面有什么区别?我将尝试在下面给出我的理解:
我知道第 1 点是 MVC。第 2 点是 MVVM。
我知道 - .NET MVC 对 razor 的支持是 MVC(模型、视图、控制器概念),在视图页面上支持 razor 语法,没有任何代码隐藏(我的意思是逻辑在控制器级别) .而 .NET razor pages 是类似于页面(razor 语法)和代码的 MVVM 方法。
这是正确的吗?
问题 2:我听到我的同事谈到 .NET MVC 剃须刀页面。我很困惑,因为我从来没有遇到过这样的事情。我的理解是 .NET MVC 与 .NET Razor 页面不同。有什么叫做.NET MVC razor pages 的东西吗?
问题3:这篇文章(https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/modern-web-applications-characteristics#traditional-and-spa-behaviors-supported)提到:
ASP.NET Core 支持 MVC(基于视图或页面)
当名称 (MVC) 本身说它是基于视图时,MVC 如何是基于页面的?有人可以帮我解释一下吗?
【问题讨论】:
如果您真正阅读文档并完成教程而不是寻找一些学术定义,您会回答所有问题。 Razor 是一个营销名称。它用于 WebForms(MVC、Pages、Blazor)之后的 all Web 堆栈使用的语法。 MVC 使用的视图引擎称为 Razor Engine,因为它使用 Razor 语法。 Pages 不是 MVVM 实现,这就是为什么他们将类称为 PageModel,而不是 ViewModel。自 Backbone 以来,每个 MVVM 框架的行为都不同。 您的问题已在Choose an ASP.NET Core web UI 中得到解答。没有.NET MVC Razor Pages
这样的东西。但是您可以在同一个应用程序中同时使用 MVC 和 Pages。
【参考方案1】:
Razor 是一种模板语法。它使 C# 能够嵌入到 html 中,以便您可以使用 C# 在运行时动态生成部分 HTML。
MVC 是一个服务器端开发框架,它鼓励您使用模型-视图-控制器架构来构建您的 Web 应用程序。它使用 Razor 作为其默认视图引擎。
Razor Pages 是另一种服务器端开发框架,它依赖于以页面为中心的 Web 应用程序开发方法。它使用 Razor 作为其模板语法。
MVVM 是一种设计模式,用于在客户端上运行的应用程序 - 例如 WPF、Xamarin 和一些基于 javascript 的 SPA 框架。我见过它用来描述 Razor Pages,但我不同意,并且觉得调用 Razor Pages MVVM 只会引起混乱。
ASP.NET Core MVC 鼓励“前端控制器”方法,因为单个控制器可以负责处理多个路由,它们的唯一联系是它们与同一个实体相关。 Razor Pages 也可以看作是使用页面控制器方法的 MVC 实现。 PageModel 类类似于页面的控制器。
【讨论】:
在 MVC 中,所有请求都转到控制器,控制器决定将哪个视图提供给用户。当我们在 mvc 中有一个 razor 页面而不是视图时,那么请求是否仍然转到控制器并且控制器是否调用 Razor 页面? 在 Razor 页面中,“视图”(.cshtml 文件)与其“控制器”(PageModel 类)之间存在一对一的关系。在 MVC 框架中,控制器与其视图之间存在一对多的关系。从技术上讲,控制器不决定用户获得哪个视图。动作选择器组件根据其 URL 确定调用哪个控制器上的哪个方法来处理请求。 好吧,你是说 Razor 页面就像只有一种方法的控制器。请问路由模块是否能够处理MVC和Razor页面在同一个项目中的情况? 是的,它可以处理 MVC 控制器和 Razor 页面。以上是关于关于 razor,.NET MVC 对 razor 的支持与 .NET razor pages 有啥区别,有啥叫做 .NET MVC razor pages 的东西吗?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2,使用没有 MVC 的 Razor 页面单击按钮