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

MAUI Blazor组件异步依赖注入及数据加载顺序问题求助

问题解决步骤

1. 修正异步方法的返回类型与调用方式

Blazor组件生命周期方法支持async Task,但禁止使用async void(仅事件处理场景例外),否则框架无法追踪异步操作完成时机,导致UI不及时更新。

  • 将OnInitialized替换为OnInitializedAsync,并异步等待loadLotes:

    protected override async Task OnInitializedAsync()
    {
        await loadLotes();
        int x = 1;
    }
    
  • 将loadLotes的返回类型从async void改为async Task:

    private async Task loadLotes()
    {
        var tmpLstLotesFiltrada = await lotesManager.getLoteByIdPropriedade(idPropriedade: "-Mfp3q1ma0ZkFsIUXqyE");
        lstLotesFiltrada = tmpLstLotesFiltrada;
        // 手动通知组件状态变更,确保子组件刷新数据
        StateHasChanged();
    }
    

2. 修正依赖注入的错误赋值

[Inject]属性标记的字段不需要手动实例化,框架会自动注入实现类,手动赋值会覆盖注入实例:

[Inject]
private ILotesManager lotesManager { get; set; } = null!; // 用null!消除空引用警告

3. 修正Razor语法错误

  • 子组件参数传递:需要用@符号绑定变量,否则会传递字符串字面量而非变量值:

    <LoteCard @lstLotesFiltrada="lstLotesFiltrada" @visible="isVisible"/>
    
  • LoteCard组件内的Razor语法修正:

    • 变量输出需加@符号;
    • 条件判断需用@if语法:
      <h3>@l.numLote:@l.pesoLote</h3>
      ...
      @if (visible){
          <p> this is visible</p>
      }
      

4. 可选:添加加载状态提示

如果异步请求耗时较长,可在数据加载完成前显示加载提示,提升用户体验:

@if (lstLotesFiltrada == null || !lstLotesFiltrada.Any())
{
    <p>加载中...</p>
}
else
{
    <LoteCard @lstLotesFiltrada="lstLotesFiltrada" @visible="isVisible"/>
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:43:13