传递给 onclick 函数的 blazor 变量参数
blazor variable argument passing to onclick function
我想将 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>
}
这是经典,但在 Blazor 的上下文中略有新意。
您需要复制一份,否则 lambda 'captures' 循环变量。抓取副本即可。
@for (int i = 0; i < 3; i++)
{
int copy = i;
<li> item @i <button onclick=@(() => clickItem(copy))>Click</button> </li>
}
请注意,这是 for()
循环的问题,而不是 foreach()
。
我试过了,很管用。希望对您有所帮助。
@foreach (var item in ListOfUser)
{
<tr>
<td>@item.FirstName</td>
<td>
<button @onclick="(() => GetDetail(item.UserId)) "> Click</button>
</td>
</tr>
}
我想将 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>
}
这是经典,但在 Blazor 的上下文中略有新意。
您需要复制一份,否则 lambda 'captures' 循环变量。抓取副本即可。
@for (int i = 0; i < 3; i++)
{
int copy = i;
<li> item @i <button onclick=@(() => clickItem(copy))>Click</button> </li>
}
请注意,这是 for()
循环的问题,而不是 foreach()
。
我试过了,很管用。希望对您有所帮助。
@foreach (var item in ListOfUser)
{
<tr>
<td>@item.FirstName</td>
<td>
<button @onclick="(() => GetDetail(item.UserId)) "> Click</button>
</td>
</tr>
}