我有一个完全可操作的 Blazor 服务器端项目和一个 .NET Core 3 MVC 项目,它们都在同一个解决方案中。我现在尝试在我的 MVC 项目中使用 Blazor 项目中的组件。
我已经设法让组件在 MVC 页面上呈现,但是 Blazor 组件上的按钮单击不会触发组件的 onclick 事件,而是我只是导航到https://localhost:44341/?
我不清楚我需要在 MVC 解决方案中进行哪些更改才能使其正常工作?官方文档讨论了在 MVC 项目中使用组件,并且在与 Dan Roth的视频聊天中提到了它,但都没有详细说明如何实现它。
谁能带我了解如何将服务器端 Blazor 改造为 MVC 项目的完整步骤(或指向我的示例)?
我试过的
我的 Blazor 项目仍然具有标准模板的 Counter 组件,因此我尝试通过引用 Blazor 项目并将其添加到我的 MVC 解决方案中,然后将其添加到我的 index.cshtml 文件中:
<div id="Counter">
@(await Html.RenderComponentAsync<Counter>())
</div>
这可以正确呈现,但按钮单击不起作用。
我已将 JS 文件添加到 MVC 应用程序 _Layout 页面:
<script src="_framework/blazor.server.js"></script>
在 MVC 项目的 Startup.cs 文件中打开 Server Side Blazor:
services.AddServerSideBlazor();
我还在 MVC 项目中添加了 Pages 和 Shared 目录,并复制了 _Imports 和 MainLayout 文件——不确定是否需要。
如果没有这样做,我尝试从所有 Blazor 模板(客户端、客户端托管和服务器端)中启动新项目以寻找线索,但所有这些示例都设置为具有单个 Blazor 的完整 SPA入口点(App
文件)托管在 .html 文件中,而我想在许多不同的现有 MVC 页面上呈现 Blazor 组件。
然后,我尝试将这些项目的一部分(以及我正在工作的 Blazor 项目的一部分)添加到 MVC 项目中,但无法让它完全工作。
我也尝试按照此处的答案进行操作,但这适用于将 Blazor 组件文件添加到 MVC 项目中,而我的 Blazor 文件目前(大部分)位于不同的项目中。
迄今为止我的实验中的随机问题
- 我已
services.AddServerSideBlazor();
在 MVC 应用程序的 Startup.cs 中添加。那里还需要什么吗? - 我的 MVC 应用程序仍在传统上
AspNetCore.Routing
,如果我只将组件放置在现有 MVC 页面上(即我不会有 Blazor 页面,只有 Blazor 组件),我是否还需要切换到 Core 3 的端点路由。 - 在浏览器中运行的 blazor javascript 文件(通过 SignalR)与之通信的 Blazor 的服务器端部分是否需要端点路由?我在浏览器中从 js 文件中得到一个 404。
- 如果我只是托管组件,我还需要“App”(App.razor)类/页面作为入口点吗?
- 如果是这样,我是否需要将
<app>@(await Html.RenderComponentAsync<App>())</app>
_Host.cshtml 中的行放在我的 MVC 项目中的某个位置? - 我是否需要从我的 MVC 项目中的 Blazor 项目中重现 Pages 和 Shared 文件夹,以及两个 _Imports.razor 文件和 MainLayout.razor 文件?
- 我认为 Blazor 现在是 Microsoft.NETCore.Platforms 文件的一部分(在 MVC 项目的 SDK 节点下引用),所以我认为我不需要为 Blazor 添加单独的 NuGet 包到 MVC 项目是否正确?