5

我想将 int i 传递给每个列表项的按钮 onclick 函数。我预计“clickItem”函数将收到对应列表项的 0..2。但结果表明它总是接收 3 作为参数。似乎 clickItem(i) 中的变量 i 在 for 循环的渲染时没有被评估。我尝试将其更改为“clickItem(@i)”,但它仍然是一样的。我应该怎么办?(我使用的是 blazor 服务器端,.net core 3 preview 5)

        @for (int i = 0; i < 3; i++)
        {
            <li> item @i <button onclick=@(() => clickItem(i))>Click</button> </li>
        }

在此处输入图像描述

4

2 回答 2

13

这是经典的,但在 Blazor 的上下文中略显新。

您需要进行复制,否则 lambda 会“捕获”循环变量。捕获副本是可以的。

@for (int i = 0; i < 3; i++)
{
    int copy = i;
    <li> item @i <button onclick=@(() => clickItem(copy))>Click</button> </li>
}

请注意,这是for()循环的问题,但不是foreach().

于 2019-06-03T11:11:37.463 回答
0

我试过这个,它奏效了。希望它对您有所帮助。

 @foreach (var item in ListOfUser)
            {
                <tr>
                    <td>@item.FirstName</td>
                    <td>
                        <button @onclick="(() => GetDetail(item.UserId)) "> Click</button>
                    </td>
                </tr>
            }
于 2020-01-21T09:23:17.180 回答