Razor Pages与服务器端Blazor的比较

26

Razor Pages 用于像早期的服务器端 Web 应用程序一样的应用程序。

Blazor 致力于为创建单页应用程序(SPA)提供一个替代方案,该方案可以在客户端浏览器中运行(主要是)。这与流行的 JavaScript 框架(如 Angular 或 React)有所不同。

然而,我也听说过服务器端 Blazor,这有点让我困惑。根据这个答案,服务器端 Blazor 只是在服务器上运行的 Razor 组件。但 Razor Pages 和 Razor 组件之间有什么区别呢?

注意:我并不是在试图找出哪个更好或者“正确的选择”。我只是试图找出它们之间的技术差异。


2
这个回答解决了你的问题吗?Blazor vs Razor - Flores
2
@Flores 差不多了,但还不够。像大多数其他帖子一样,它主要讨论 Razor vs. 客户端 Blazor(单页应用程序)。在这种情况下,差异非常明显。我的困惑只在话题转向服务器端 Blazor 时开始(尽管下面的回答肯定有助于我理解)。不过我很感激这篇文章,绝对值得一读 :-) - Jakob Busk Sørensen
https://www.hanselman.com/blog/what-is-blazor-and-what-is-razor-components - Amjad
https://espressocoder.com/2019/02/21/whats-the-difference-between-razor-and-blazor/ - Amjad
4个回答

39

最大的区别是razor pages在服务器上呈现并将整个页面发送到客户端。Blazor服务器端仅通过signalr连接发送DOM更改。因此,没有页面重新加载。您需要在服务器上运行asp.net core才能使用此技术。

Blazor WebAssembly完全在客户端进行。对DOM的更改会“本地”应用,这可以从静态Web服务器进行托管。


27
Razor组件用于创建可重用的Web页面组件。 Razor页面将Web页面和控制器合并到单个文件中。 Razor组件主要由Blazor使用,但也可以在Razor Pages内部使用,尽管它们更适合于Blazor
您无法显示不带托管页的Razor组件,但可以显示Razor页面而不使用Razor组件Razor组件从.NET Core 3.0开始提供。 Razor页面从.NET Core 2.1开始提供。 编辑 RazorPages分为HTML页面和.cs代码文件。而Razor组件通常在一个文件中具有.cs和HTML,但也可以将其分离为HTML和Code Behind文件。 Razor页面PageModel允许ASP.NET Core将控制器返回的数据绑定到页面中的公共属性,然后在页面中使用该属性引用模型。您可以在PageModel类中使用属性在代码中引用数据,并在HTML中使用@model属性引用相同的属性。

Razor Components 不会绑定到模型,而是使用参数分配值给它们,类似于如何为标准的HTML元素分配值和事件。可以在此处看到一个例子。


你能解释一下 Razor Component 和 RazorPages 中使用的 PageModel 之间的区别吗? - Jakob Busk Sørensen
“Razor组件从.NET Core 3.0版本开始提供”…你确定吗?因为你所说的完全是错误的。 - enet
“而 Razor 组件将 .cs 和 HTML 放在单个文件中”... 这里你也错了。Razor 组件可以包含两个部分:视图部分由 Html 标记和 Razor 语法混合组成,代码部分(@code 块)。但是,就像 Razor 页面一样,Razor 组件也可以分为两个部分:视图部分(.razor)和代码部分或代码后端(如果您愿意)(.razor.cs)。我还可以补充说,这是使用 partial 关键字完成的... - enet
@enet 感谢您的提醒。我已经编辑了关于Razor Components被拆分到文件中的答案。至于.NET Core 3.0及以上版本,我仍然相信这是正确的。Razor ComponentsBlazor的一部分,该技术在.NET Core 3.0中推出。如果您认为它们在早期版本中就已经存在,请告诉我。 - Simply Ged
组件从一开始就在Blazor中提供,无论用什么名称来引用它们... 然而,以下是来自文档的说明:在Blazor中,组件正式被称为Razor组件。 - enet

5
但Razor Pages和Razor组件有什么区别呢?
Blazor的命名问题有些混淆。
Blazor不是Razor,但Blazor页面/组件打包在.razor文件中。Razor使用.cshtml文件。
Blazor组件可以在Razor页面上使用。
Blazor服务器端一度被称为“Razor Components”,但已经撤回。
我只是想弄清楚它们之间有哪些技术上的区别。
Razor页面是一个轻量级的MVC分支,可在服务器端生成HTML。
Blazor是一个组件框架,可以直接在浏览器(WebAssembly)中运行,也可以在服务器上运行。在两种情况下,它都会向浏览器DOM渲染小的更新。

5
首先要提到的是,Blazor Server App 和 Blazor WebAssembly App 的组件模型是相同的,唯一的区别在于它们的执行方式。Blazor Server Apps,也称为服务器端 Blazor 应用程序,在服务器上执行,当用户单击按钮元素后,从该执行中产生的 Html 内容通过 SignalR 连接发送到客户端(可能是浏览器)。另一方面,Blazor WebAssembly Apps,也称为客户端 Blazor 应用程序,在用户的浏览器上执行;也就是说,C# 代码在浏览器中运行,在该过程结束时输出和呈现 Html 内容。
那么 Razor Pages 和 Razor Components 有什么区别呢?Razor Components 是 Blazor 的组件模型,用于 Blazor 的两种执行方式。组件是一段代码单元,通常派生自 ComponentBase 类。它可以包含两部分:视图部分由混合了 Razor 语法的 Html 标记组成,代码部分则是 C# 代码。一个组件可以是另一个组件的子组件,但它也可以是一个页面组件;也就是说,一个在渲染时构成整个 Html 文档的组件。
而 Razor Pages 是一个 Web 框架,就像 MVC 框架一样。使用 Razor Pages,您创建的页面使用 Razor 语法和 C#,就像 Blazor 一样,这就解释了为什么它们乍一看非常相似。然而,Razor Pages 只能在服务器上创建,Html 内容被输出(呈现)并推送到用户的浏览器。它们的架构不同,您需要学习一系列的类才能编写它们。总之,它们唯一的相似之处就是使用了 Razor 语法和 C#。语言是造成误解的根源,在编程世界中尤为如此,这体现在 Blazor 的命名上(命名多次更改),无意地将其与 Razor Pages 相混淆。加上您可以在 Razor Pages 中嵌入 Razor Components 这一事实似乎是进一步混淆的来源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接