【发布时间】:2020-03-26 21:45:35
【问题描述】:
我正在尝试在 .net core 3 MVC 项目中使用 Blazor。我使用了一些教程来做到这一点,例如 https://fizzylogic.nl/2019/08/18/integrating-blazor-in-an-existing-asp-net-core-application/ 和 https://chrissainty.com/using-blazor-components-in-an-existing-mvc-application/ 。
什么工作:Blazor 组件的初始化工作正常。 OnInitializedAsync() 函数被触发,组件渲染良好。
这是来自 MVC 视图的调用:
@(await Html.RenderComponentAsync<MyProject.Components.Locations>(RenderMode.ServerPrerendered))
什么不起作用:在 Blazor 组件中使用 @onclick。这是一些示例代码:
<span @onclick="AddLocation"></span>
@code {
private void AddLocation(){
}
}
它可能不起作用的原因是我在连接初始化时出错。该组件不是从基本路径呈现的,而是从特定视图的 url 呈现的,我认为这会与连接混淆。我在 Chrome 的控制台中收到这些错误:
- [2019-12-02T09:26:08.117Z] 信息:将“_blazor”规范化为“https://localhost:44375/Locations/_blazor”。 _blazor/negotiate:1 加载资源失败:服务器响应状态为404() blazor.server.js:1
- [2019-12-02T09:26:08.155Z] 错误:无法完成与服务器的协商:错误 e.log @ blazor.server.js:1 blazor.server.js:1
- [2019-12-02T09:26:08.156Z] 错误:无法启动连接:错误 e.log @ blazor.server.js:1 blazor.server.js:15
- [2019-12-02T09:26:08.156Z] 错误:错误 e.log @ blazor.server.js:15 blazor.server.js:1 - 未捕获(承诺中)错误:如果连接未处于“已连接”状态,则无法发送数据。
主要错误可能是“将 '_blazor' 标准化为 'https://localhost:44375/Locations/_blazor'”。从基本路径请求 _blazor 有效。有谁知道在这种情况下如何设置基本路径?
(是的,普通 Razor 页面环境中的 Blazor 可能更容易,但我想在 MVC 中尝试 Blazor。)
编辑 1
<base href="/" /> 在标题中似乎已经修复了控制台中的错误。我希望它能解决 onclick 问题,但还没有……我认为该组件以某种方式被视为普通剃须刀组件,而不是 Blazor 组件。如果我查看生成的 html,我可以找到:<span @onclick="AddLocation" ></span>,我认为这是错误的(对于普通的 razor/blazor 项目,@onclick 从 html 中消失)。有谁知道这个的解决方案?试过这个:https://stackoverflow.com/a/58444907/1794246,但这并没有多大作用。
编辑 2
在 MVC 项目的根目录中有一个 _imports.razor 文件显然没有任何作用。将这些 using 语句添加到 Blazor 组件实际上解决了 onclick 的问题(Intellisense 也更好地识别了组件中的内容):
@using Microsoft.AspNetCore.Components
@using Microsoft.AspNetCore.Components.Web;
【问题讨论】:
-
根据需要设置页面的基本href
<head> <base href="/" /> -
@aguafrommars 谢谢,修复了控制台中的错误!没有修复 onclick 错误,所以还有其他问题。查看我的编辑。
标签: c# asp.net-mvc blazor blazor-server-side