【问题标题】:Is it possible to run a Blazor client page within an ASP.NET Core MVC App?是否可以在 ASP.NET Core MVC 应用程序中运行 Blazor 客户端页面?
【发布时间】:2019-11-13 05:24:24
【问题描述】:

我一直在阅读有关 Razor Pages 的文章,从 JavaScript 中解放出来的想法非常引人注目。根据我收集到的信息,虽然 Blazor 客户端使用与 ASP.NET Core 其余部分相同的库,但它是一个独立的 ASP.NET Core Web 平台。

是否可以在 ASP.NET Core MVC 应用程序中添加 Blazor 页面?为什么不将其开发为现有 ASP.NET Core 平台的补充,而不是单独的平台?

【问题讨论】:

  • 它不是一个单独的平台The Getting Started tutorial 从一个 ASP.NET Core 应用程序开始,并向其中添加 Blazor 组件。如果问题是Why can't I convert an MVC controller to a Blazor controller,那是因为 Blazor 在浏览器上运行,就像 Angular、React、Vue 或任何其他 SPA 框架一样。事实上,Blazor 的模型非常与 Angular 的相似
  • 所以Is it possible to run a Blazor client page within an ASP.NET Core MVC App?的答案是Yes, that's the easiest way to do it

标签: c# asp.net-core asp.net-core-mvc blazor


【解决方案1】:

是的。可以在 ASP.NET MVC Core 页面中运行 Blazor 客户端页面。

这仅仅是因为客户端 Blazor 就像在 MVC Core 应用程序中拥有 React 应用程序一样。它们是完全不同的东西。客户端 Blazor 在浏览器中工作。这意味着 MVC 创建运行 Client Blazor 的 HTML 页面的方式与 MVC 创建运行 React 应用程序的 HTML 页面相同。只需注入一些特定于框架的魔法。

对于 Blazor,这意味着至少添加。

<app>Loading...</app>
<script src="_framework/blazor.webassembly.js"></script>

和服务器上的代码。

app.UseClientSideBlazorFiles<Client.Startup>();
app.UseEndpoints(endpoints =>
{
    // ...
    endpoints.MapFallbackToClientSideBlazor<Client.Startup>("index.html");
});

Microsoft 在模板中将此模型称为 Hosted Blazor。

由于 MVC 在服务器上执行,将 Blazor 代码作为 MVC 框架的一部分运行的唯一方法是使用服务器端 Blazor,因为它应该在服务器上执行。同样,因为 MVC 在服务器上执行。

如果您真的想将 Blazor 作为 MVC 应用程序的一部分运行,那么您应该发布独立的客户端 Blazor 应用程序,并将输出视为您必须使用标准 MVC 方法提供的一些 JS 库,并以某种方式注入页面。这仍然是可行的,但你自己。

【讨论】:

  • 实际上它们并不是完全独立的东西。你可以通过你的 startup.cs 运行 Vue / React 等,并将它们集成到你的 .NET Core 应用程序中,它们仍然会在客户端运行
  • 这仍然限制整个应用程序在某个单一路径上运行。与服务器端 Blazor 相同。因此,从某种意义上说,如果这是所需的行为,那么 OP 应该寻找服务器端解决方案。
【解决方案2】:

不,您不能“在 ASP.NET MVC Core 页面中运行 Blazor 客户端页面。”

Blazor 中不存在 page 的概念,除非您的意思是在浏览器中显示的 Document Page。

Blazor 专注于组件的概念:Blazor 组件模型。

是的,您可以在 MVC 应用或 Razor Pages 应用中嵌入 Blazor 组件。

这是如何做到的:

  1. 添加对呈现 组件 的 Html 帮助器方法的调用。这里的组件实际上包含 Blazor 应用程序 (App.razor) 中的其余组件,这就是整个 Blazor 应用程序将在 Razor 页面应用程序中呈现的原因。

注意:这不是 Blazor...在 Blazor 中,我们没有 Html Helpers

<app>@(await Html.RenderStaticComponentAsync<App>())</app>

以下是使用它的页面的链接: https://github.com/danroth27/ClientSideBlazorWithPrerendering/blob/master/ClientSideBlazorWithPrerendering.Server/Pages/_Host.cshtml

请注意,_Host.cshtml 不是 Blazor 组件。这又是一个 Razor Pages 页面。

请注意,在示例中实际呈现的是整个 Blazor 应用程序,但当然您可以使用普通的简单 Blazor 组件(一个或多个,不相关的组件或相关的组件,即带有子组件的父组件)。校长是一样的。

希望这会有所帮助...

【讨论】:

  • 可以从 Blazor(ASP.NET Core 托管)项目开始。您将需要在 Startup.cs 中执行一些更改,并且您还需要将生成的 /dist/ 文件夹从您的客户端项目输出文件夹复制到您的服务器输出文件夹中。这篇博文有帮助:chrissainty.com/prerendering-a-client-side-blazor-application
  • 您好,链接失效了
猜你喜欢
  • 2021-02-06
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多