Blazor表单提交时出现导航错误(.NET 8.0)
.NET 8 Blazor Web应用表单提交导航错误问题
我在基于.NET 8.0的Blazor Web应用中,提交表单并执行对应处理方法时出现导航错误。已通过依赖注入在代码顶部引入NavigationManager:
@inject NavigationManager NavigationManager
发现只要给处理方法添加async前缀,该错误就不会出现。我查阅过相关GitHub Issue,但认为与自身情况不匹配。(附错误截图:[截图1]、[截图2])
问题原因
Blazor中,表单提交的默认行为是触发HTTP POST导航。如果处理方法是同步方法,Blazor框架无法自动阻止这个默认行为,导致浏览器的原生导航和通过NavigationManager执行的客户端路由导航发生冲突,进而抛出错误。而使用async异步方法时,框架会自动识别并阻止表单的默认提交行为,确保客户端导航正常执行。
解决方案
方案1:使用异步处理方法
即使业务逻辑没有异步操作,也可以通过返回Task.CompletedTask将方法声明为异步:
async Task HandleFormSubmit() { // 执行表单处理逻辑 NavigationManager.NavigateTo("/target-route"); await Task.CompletedTask; }
方案2:手动阻止表单默认行为
在表单标签上添加@onsubmit:preventDefault属性,显式阻止浏览器的默认提交导航:
<form @onsubmit="HandleFormSubmit" @onsubmit:preventDefault> <!-- 表单控件 --> <button type="submit">提交</button> </form>
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

