blazor variable argument passing to onclick function
我想将int i传递给每个列表项的按钮onclick函数。我希望" clickItem"函数的对应列表项将收到0..2。但事实证明,它总是收到3作为参数。似乎在渲染for循环时未评估clickItem(i)中的变量i。我尝试将其更改为" clickItem(@i)",但仍然相同。我该怎么办? (我正在使用blazor服务器端,.net core 3预览5)
1 2 3 4 5 6 7 8 | @for (int i = 0; i < 3; i++) { <li> item @i <button onclick=@(() => clickItem(i))>Click</button> </li> } |
这是经典,但在Blazor的背景下有点新。
您需要进行复制,否则lambda会"捕获"循环变量。可以捕获副本。
1 2 3 4 5 6 7 8 9 | @for (int i = 0; i < 3; i++) { int copy = i; <li> item @i <button onclick=@(() => clickItem(copy))>Click</button> </li> } |
我尝试了这个,并且奏效了。希望对您有所帮助。
1 2 3 4 5 6 7 8 9 | @foreach (var item in ListOfUser) { <tr> <td>@item.FirstName</td> <td> <button @onclick="(() => GetDetail(item.UserId))"> Click</button> </td> </tr> } |