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

Blazor中如何从子组件向父组件传List?编译正常但传值为null

Blazor子组件向父组件传递数组/ArrayList 解决null问题

核心问题排查(常见原因)

  • 子组件未提前实例化数组/ArrayList,导致传递的是未初始化的null对象
  • EventCallback未正确绑定或触发,父组件未接收到数据
  • 误用普通参数传递,未使用Blazor官方推荐的回调机制

正确实现步骤

1. 子组件代码

定义EventCallback<T>类型参数用于数据传递,同时确保数组先完成实例化:

@code {
    // 声明向父组件传递数据的回调参数
    [Parameter]
    public EventCallback<List<string>> OnDataPassed { get; set; }

    // 提前实例化集合,避免传递null
    private List<string> _childData = new List<string>();

    // 触发数据传递的方法(可绑定按钮点击或其他事件)
    private async Task SendDataToParent()
    {
        // 给集合赋值示例
        _childData.Clear();
        _childData.Add("测试项1");
        _childData.Add("测试项2");
        
        // 触发回调,将数据传递给父组件
        await OnDataPassed.InvokeAsync(_childData);
    }
}

2. 父组件代码

绑定子组件的回调方法,接收并处理传递过来的数组:

<!-- 引用子组件并绑定回调方法 -->
<ChildComponent OnDataPassed="HandleReceivedData" />

<p>父组件接收的数据:@string.Join(", ", _parentData)</p>

@code {
    private List<string> _parentData = new List<string>();

    // 处理子组件传递的数据
    private void HandleReceivedData(List<string> data)
    {
        if (data != null)
        {
            _parentData = data;
            StateHasChanged(); // 必要时手动刷新UI
        }
    }
}

针对ArrayList的适配(建议优先用泛型集合)

如果必须使用ArrayList,只需将上述代码中的List<string>替换为ArrayList即可:
子组件示例:

[Parameter]
public EventCallback<ArrayList> OnDataPassed { get; set; }

private ArrayList _childData = new ArrayList();

父组件同步调整接收数据的类型即可。

关键错误修正点

  • 必须提前用new实例化集合对象,禁止传递未初始化的变量
  • 确保父组件正确绑定子组件的EventCallback参数,不要遗漏赋值
  • 避免在组件未完成渲染的生命周期阶段传递数据(比如OnInitialized早期),建议在用户交互事件或OnAfterRenderAsync中触发传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:55:24