【发布时间】:2023-03-23 02:28:01
【问题描述】:
我有一个完全运行的 Blazor 服务器端项目和一个 .NET Core 3 MVC 项目,它们都在同一个解决方案中。我现在尝试在我的 MVC 项目中使用 Blazor 项目中的组件。
我已经设法让组件在 MVC 页面上呈现,但是 Blazor 组件上的按钮单击不会触发组件的 onclick 事件,而是导航到 https://localhost:44341/?
我不清楚我需要在 MVC 解决方案中进行哪些更改才能使其正常工作?官方文档talks about using components in and MVC project,在这个video chat with 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 模板(客户端、客户端托管和服务器端)中启动新项目以寻找线索,但所有这些示例都设置为完整的 SPA托管在 .html 文件中的单个 Blazor 入口点(App 文件),而我想在许多不同的现有 MVC 页面上呈现 Blazor 组件。
然后,我尝试将这些项目的一部分(以及我正在工作的 Blazor 项目的一部分)添加到 MVC 项目中,但无法使其充分发挥作用。
我也尝试关注the answer here,但这是将 Blazor 组件文件添加到 MVC 项目中,而我的 Blazor 文件目前(大部分)位于不同的项目中。
迄今为止我的实验中的随机问题
- 我在 MVC 应用的 Startup.cs 中添加了
services.AddServerSideBlazor();。那里还需要什么吗? - 我的 MVC 应用程序仍在传统的
AspNetCore.Routing上,如果我只将组件放置在现有 MVC 页面上(即我不会有 Blazor 页面,只有 Blazor 组件),我是否还需要切换到 Core 3 的端点路由)。 - 在浏览器中运行的 blazor javascript 文件(通过 SignalR)与之通信的 Blazor 的服务器端部分是否需要端点路由?我在浏览器中从 js 文件中得到 404。
- 如果我只是托管组件,是否还需要“App”(App.razor) 类/页面作为入口点?
- 如果是这样,我是否需要将 _Host.cshtml 中的
<app>@(await Html.RenderComponentAsync<App>())</app>行放在我的 MVC 项目中的某个位置? - 是否需要在我的 MVC 项目中重现 Blazor 项目中的 Pages 和 Shared 文件夹,以及两个 _Imports.razor 文件和 MainLayout.razor 文件?
- 我认为 Blazor 现在是 Microsoft.NETCore.Platforms 文件的一部分(在 MVC 项目的 SDK 节点下引用),所以我认为我不需要为 Blazor 添加单独的 NuGet 包到 MVC 是否正确项目?
【问题讨论】:
标签: c# blazor blazor-server-side