这是一个经典问题,但在 Blazor 的背景下稍有不同。
你需要复制 i
,否则会出现“lambda 捕获了循环变量”的情况。捕获复制品是可以的。
@for (int i = 0; i < 3; i++)
{
int localCopy = i;
<li> item @i <button onclick=@(() => clickItem(localCopy))>Click</button> </li>
}
请注意,这是for()
循环的问题,而不是foreach()
,并且仅出现在=>
的右侧。
如果你想使用foreach
循环,可以参考下面的示例。
在循环内部声明一个名为index
的变量,该变量用于使用items
列表上的IndexOf
方法存储当前项的索引。当单击按钮时,将此索引作为参数传递给clickItem
函数。
@foreach (var item in items)
{
var index = items.IndexOf(item);
<li> item @item
<button onclick=@(() => clickItem(index))>Click</button>
</li>
}
我尝试了这个,它有效。希望对你有所帮助。
@foreach (var item in ListOfUser)
{
<tr>
<td>@item.FirstName</td>
<td>
<button @onclick="(() => GetDetail(item.UserId)) "> Click</button>
</td>
</tr>
}
i
。 - H H