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

Blazor中如何获取元素ID并传递给点击事件

Blazor动态表格条目点击传参解决方案

你遇到的核心问题是循环变量捕获导致的引用问题,直接在lambda里用循环变量i会导致所有点击都拿到循环结束时的最终值。下面是两种可行的解决方法:

方法一:使用局部变量保存当前循环值

在for循环内部声明一个局部变量,保存当前的i值,避免lambda捕获循环变量的引用:

for (var i = 0; i < 7; i++)
{
    var currentId = i; // 保存当前迭代的ID到局部变量
    <td id=@currentId @onclick="() => SelectEntry(currentId)">@currentId</td>
}

对应的SelectEntry方法需要接收ID参数:

private void SelectEntry(int entryId)
{
    // 在这里使用entryId识别被点击的条目
    // 示例逻辑:输出点击的ID
    Console.WriteLine($"选中的条目ID: {entryId}");
}

方法二:改用foreach循环遍历范围

用Enumerable.Range生成迭代范围,foreach循环的迭代变量每次都是独立实例,不会出现引用捕获问题:

@foreach (var i in Enumerable.Range(0, 7))
{
    <td id=@i @onclick="() => SelectEntry(i)">@i</td>
}

同样需要对应带参数的SelectEntry方法,逻辑和方法一一致。

为什么原代码会失效?

for循环的变量i是在循环外部声明的,lambda表达式() => SelectEntry()捕获的是这个变量的引用,而不是每次循环的具体值。当循环结束后,i的值已经变为6,所以所有td的点击事件触发时,都会使用这个最终值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:20:57