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

Blazor WASM从服务端刷新数据后UI未更新问题求助

问题原因
  • 核心问题出在Delete方法的返回值使用了async void:Blazor的异步事件处理逻辑中,只有返回Task的异步方法,框架才能跟踪其执行生命周期,在异步操作全部完成后自动触发UI重渲染。async void属于“火后不管”的写法,框架无法感知方法的执行完成时机,哪怕你已经更新了products变量,也不会触发自动UI刷新。
解决方案
  1. 优先将Delete方法的返回值从async void修改为async Task,Blazor原生支持事件处理器返回Task类型,修改后框架会自动等待异步逻辑执行完成,然后触发UI刷新,修改后的代码如下:
private async Task Delete(string id)
{
    Console.WriteLine($"Delete product {id}");
    await ProductService.DeleteProduct(id);
    Console.WriteLine($"Deleted product {id}");
    products = await ProductService.GetProducts();
    Console.WriteLine($"Products loaded {products.Count}");
}
  1. 如果存在特殊场景(比如异步逻辑运行在Blazor同步上下文之外),修改返回值后仍未触发刷新,可以在更新products变量后手动调用StateHasChanged()方法强制触发UI重绘:
products = await ProductService.GetProducts();
StateHasChanged(); // 手动触发UI渲染

内容的提问来源于stack exchange,提问作者Gerrit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:00