You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:03