从Blazor中生成的按钮调用功能

时间:2019-03-21 10:41:40

标签: c# asp.net-core blazor

我目前正在尝试通过一些自动生成的按钮调用方法,这些按钮是通过某些配置设置的。因此,按钮的数量是可配置的。我有如下所示的页面。我的问题是,如果我有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

1 个答案:

答案 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。

希望这对您有帮助...