【问题标题】: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。

标签: asp.net-mvc razor-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 页面。
猜你喜欢
  • 2020-05-08
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2017-06-10
  • 2019-10-05
  • 2018-06-29
  • 2018-11-08
  • 2019-03-25
相关资源
最近更新 更多