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 }