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

Blazor EventCallback如何向父组件传递含rowID的多个回调参数

解决方案

你期望的双参数回调写法完全可以实现,核心是通过父组件Lambda表达式闭包捕获当前迭代的rowID,无需修改子组件代码或GenericWidgets定义,修改内容如下:

1. 调整父组件中子组件的回调绑定

把原来的onAddingWidget="AddWidgetToRow"修改为Lambda表达式,同时接收子组件返回的GenericWidgets对象和当前循环的rw.rowID:

<AddWidgetToColumnComponent 
    rowID="rw.rowID" 
    onAddingWidget="(widget) => AddWidgetToRow(widget, rw.rowID)">
</AddWidgetToColumnComponent>

2. 调整父组件回调方法签名

直接使用你期望的双参数定义即可:

private void AddWidgetToRow(GenericWidgets evnt, int rowID)
{
    // 直接使用传入的rowID查找对应行,不需要硬编码ID
    var row = pg.rows.Where(x => x.rowID == rowID).FirstOrDefault();
    row?.addWidgetSection1(evnt);
}

注意事项

如果使用的是.NET 6之前的Blazor版本,循环内捕获变量存在闭包陷阱,需要在循环内额外声明临时变量存储当前行对象:

@foreach (var rw in pg.rows)
{
    // 新增临时变量避免闭包问题
    var currentRow = rw;
    @if (currentRow.rowDef == 1)
    {
        @if (currentRow.widgetsSection1.Count == 0)
        {
            <AddWidgetToColumnComponent 
                rowID="currentRow.rowID" 
                onAddingWidget="(widget) => AddWidgetToRow(widget, currentRow.rowID)">
            </AddWidgetToColumnComponent>
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:54:04