onclick函数带参数

问题

我想将int i传递给每个列表项的按钮onclick函数.我希望"clickItem"函数的对应列表项将收到0..2.但是事实证明,它总是接受3作为参数.似乎在渲染for循环时未评估clickItem(i)中的变量i.我尝试将其更改为"clickItem(@i)",但仍然相同.我该怎么办? (我正在使用blazor服务器端,.net core 3预览5)

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

解决方案

这是经典的游戏,但在Blazor的上下文中有点新.

您需要进行复制,否则lambda会"捕获"循环变量.捕获副本就可以了.

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

 

posted @ 2021-09-30 11:32  stweily  阅读(633)  评论(0编辑  收藏  举报