我目前正在尝试通过一些自动生成的按钮调用方法,这些按钮是通过某些配置设置的。因此,按钮的数量是可配置的。我有如下所示的页面。我的问题是,如果我有3个按钮并且按了1个按钮,则正确调用了ButtonClicked,但是索引始终为3-select
c.id
from
"contragents" as "c"
inner join (VALUES (131746), (56082), (168891)) AS v(id) ON c.id = v.id
语句的int i
的最终值。我当然希望将按钮的索引传递给函数。一个明显的解决方案是将一个按钮包装在我自己的组件中,该组件随后将带有一个索引参数,并且可以将其传递给一个buttonclicked事件,但是如何在不构建自己的按钮组件的情况下使下面的代码正常工作?>
for
答案 0 :(得分:5)
我想您应该按如下所示将局部变量添加到循环中:
@for (int i = 0; i < Buttons.Count; i++)
{
var local = i;
<button type="button" class="btn btn-primary btn-lg" style="margin:10px" onclick="@((ui) => ButtonClicked(local))">@Buttons[i]</button>
}
这是标准的C#行为,与Blazor无关,在该行为中,lambda表达式@((ui) => ButtonClicked(i))
可以访问变量而不是其值。您必须定义一个局部于循环的变量,否则您的lambda表达式将始终调用ButtonClicked(i)
,并且在循环结束时我等于3。
希望这对您有帮助...