在 Blazor 和 MVC 中呈现视图

Rendering Views in Blazor and MVC

我已经使用 .Net 几年了,但一直都是 API,所以我从未使用过 MVC 或 Razor。现在 Blazor 出来了,尝试完整的 .Net 堆栈似乎是个好主意。

使用 Blazor 时,在哪里呈现项目列表?

MVC 和 Razor 的工作方式与 PHP 相似,您可以直接 html/js 向客户吐槽,其中包含所有项目和内容。 Angular 和其他 SPA,您在后端 API、获取数据并在前端呈现所有内容。

Blazor 应该是 SPA 的替代品,所以它应该在前端呈现? (是的,服务器端生成 DOM 差异并传输它,在这种情况下仍然是前端呈现)。但是为什么每个人都在谈论使用 MVC 或 Razor 呢?

很好的答案,谢谢大家

Blazor 应用程序包括 Razor components. Razor is the templating syntax used in Razor components (and Razor Pages 和 MVC 视图)。在 ASP.NET Core 中,MVC 框架包括 Web API,这是您可能用于 Blazor 应用程序的后端 API 框架。

在服务器端 Blazor 中,Blazor 应用程序托管在 Razor 页面中 (_Host.cshtml)。

Razor Pages 是服务器端 HTML 生成的推荐框架。 ASP.NET 核心团队有效地建议您在 API 之后仅使用 ASP.NET 核心 MVC。

TL;DR

模型视图控制器 (MVC) 是一种设计模式,旨在保持数据与数据呈现方式之间的分离。

ASP.NET MVC 使用该 MVC 模式,但它不是 ASP.NET 独有的,而且它是一种在客户端和服务器端填充网页同样有效的模式。

Razor 是可用于模型视图控制器 'View' 部分的众多语法之一。

较长的答案

分别回答你的两个问题:

为什么会提到MVC

MVC 的出现有几个原因。首先,许多人希望将 Blazor 合并到现有的 MVC 站点中,因此您会在该上下文中看到 MVC 的提及。 Blazor 在那里运行良好,因为它很高兴与其他技术并存(例如 , and also )。

更一般地说,MVC 并不仅仅意味着 ASP.NET MVC,它实际上指的是 Model View Controller 设计模式,这是在页面上呈现的数据(模型)、呈现方式(视图)以及将数据放入呈现模板的事物(控制器)。

在 ASP.NET MVC 中,控制器位于服务器上,并将模型的数据放入那里的视图中,但情况并非如此,在客户端获取数据同样有效(来自 API),然后也填充客户端的视图。这就是像 Angular 这样的前端框架的工作方式。

随着您的 Blazor 应用程序的增长,您可能会发现您希望在页面呈现方式、检索数据的事物、数据本身和应用程序状态之间进行分离。在这一点上,设计模式可以提供帮助。

在客户端 Blazor 中使用 MVC 模式乍一看似乎是不可能的,因为路由会将传入的页面请求解析为 Blazor 页面,而不是像在 ASP.NET MVC 中那样解析控制器 类,但是,您可以将 Blazor Page 本身视为控制器。该页面有效地从某处获取数据(模型)并将其与 Razor 代码(视图)组合,这正是控制器的用途。

其他呈现模式,例如MVVM 可能也很有用,就像 Flux or Redux.

这样的陈述模式一样

请务必注意,Blazor 团队表示他们正在努力使 Blazor 模式不可知。这是 a quote from Dan Roth

Our goal with Blazor is target a broad audience with Web developers, so we're specifically not targeting compatibility with WPF/UWP/Xamarin.Forms. We are also trying to give the you the flexibility to use the patterns you want without baking too much in the framework. So you should be able to implement MVVM patterns on top of Blazor's core concepts

剃刀怎么了?

Razor 是描述页面的全部或部分应如何在 HTML 中呈现的语法,即它是可用于描述模型视图控制器中的视图应如何呈现的语言呈现。

因为客户端 Blazor 决定了页面的呈现方式,我们需要一些可以用来描述它的东西,这就是 Razor 的用武之地。微软选择重用相同的 Razor syntax/language用于 Blazor 的服务器端 ASP.NET MVC,使用过 ASP.NET 的开发人员已经熟悉它并有助于将现有网站的部分迁移到 Blazor,而不是采用类似的东西,比如说, Handlebars 语法。

'Blazor is supposed to be a SPA replacement'

关于此的一个注意事项:Blazor 可用于构建单页应用程序,但不一定要那样使用。例如,我们使用 Blazor 将功能添加到现有 ASP.NET MVC 站点中。在这种情况下,服务器呈现一个 MVC 页面,该页面具有该页面的 Blazor 功能的占位符。 Blazor 具有良好的 JS Interop 功能,因此可以愉快地与现有页面共存。