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

Blazor筛选列表时触发空引用异常问题求助

问题分析与修复方案

核心问题

  1. 错误调用生命周期方法:你在_selectedbrand的setter里直接调用了OnInitializedAsync()——这是Blazor框架专属的生命周期方法,手动触发会打乱组件初始化流程,可能导致viewModel或相关依赖未完成初始化就被调用,引发空引用异常。
  2. 缺失null校验:调用UpdateBrand(viewModel)时,viewModel可能处于未初始化的null状态,直接传入会触发空引用。

修复步骤

1. 替换生命周期调用,改用自定义数据加载方法

创建独立的LoadBrandDataAsync()方法封装数据加载逻辑,替代直接调用OnInitializedAsync(),保证流程可控。

2. 完善null检查

在调用UpdateBrand前,先校验viewModel是否为null,避免空引用传递。

3. 调整属性setter逻辑

移除生命周期方法调用,改用自定义加载方法,同时强化空值判断。

修改后的代码示例

<MudSelect Value="@_selectedbrand" T="string" Label="Select Brand" Variant="Variant.Filled" ValueChanged="OnValueChanged" >
    @foreach (var item in brand) {
        <MudSelectItem Value="@item.Id">@item.Description</MudSelectItem>
    }
</MudSelect>

@code{
    private string? selectedBrand;
    
    // 自定义数据加载方法,封装原OnInitializedAsync中的逻辑
    private async Task LoadBrandDataAsync()
    {
        // 这里放置原OnInitializedAsync内的数据初始化、品牌列表获取等逻辑
    }

    public string _selectedbrand{
        get => selectedBrand;
        set
        {
            selectedBrand = value;
            if(brandTable is not null && viewModel is not null)
            {
                UpdateBrand(viewModel);
                await LoadBrandDataAsync();
                brandTable.SetEditingItem(null);
            }
        }
    }

    protected override async Task OnInitializedAsync()
    {
        await LoadBrandDataAsync();
        // 其他初始化逻辑
    }
}

额外建议

  • 尽量避免在属性setter里执行异步操作或复杂状态变更,可考虑通过ValueChanged事件处理筛选逻辑,代码可读性更高。
  • 检查UpdateBrand方法内部,确保访问viewModel属性前都做了null校验,避免内部触发空引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:50:29