Blazor onclick事件从循环传入计数器

时间:2018-12-28 21:38:18

标签: c# .net-core single-page-application blazor

我目前正在通过Blazor的家庭解决方案实现表分页,并且遇到了一些困难。麻烦的代码如下(用于在网格下方呈现分页按钮):

@for (int i = 0; i < vm.TotalPages; i++)
{
    <button id="pg-button-@i" class="btn btn-primary btn-sm" type="button" onclick="@(() => GetTablePage(i))">@i</button>
}

在onclick事件中发出通知,我正在调用一个函数并传入i,即当前循环的计数器。

GetTablePage方法如下:

protected async Task GetTablePage(int page)
{
    Console.WriteLine("page number: " + page);
}

我的问题是,每个按钮都将使用i设置为vm.TotalPages的长度来调用此函数。

下面是一个示例,试图使这一点更加清楚:

查看标记(注意,每个按钮的id均已正确设置):

<button id="pg-button-0" class="btn btn-primary btn-sm" type="button">0</button>
<button id="pg-button-1" class="btn btn-primary btn-sm" type="button">1</button>
<button id="pg-button-2" class="btn btn-primary btn-sm" type="button">2</button>
<button id="pg-button-3" class="btn btn-primary btn-sm" type="button">3</button>
<button id="pg-button-4" class="btn btn-primary btn-sm" type="button">4</button>
<button id="pg-button-5" class="btn btn-primary btn-sm" type="button">5</button>
<button id="pg-button-6" class="btn btn-primary btn-sm" type="button">6</button>

单击这些按钮中的任何按钮后,我的GetTablePage函数将7写入控制台,即vm.TotalPages集合的长度。

为什么会这样,我该如何克服呢?

2 个答案:

答案 0 :(得分:4)

因为{{y[x] -> E^(1/7 E^-x (-1 - x)) C[1]}}. 是一个变量,并且单击for循环总是会结束,所以那一刻它是7

您需要执行以下操作:

i

答案 1 :(得分:1)

这是标准的C#行为,其中lambda表达式@(()=> GetTablePage(i))可以访问变量而不是变量的值,其结果是lambda表达式始终调用GetTablePage (i)和i在循环结束时等于7。为了解决这个问题,您可以像下面这样定义一个变量,该变量的作用域是局部于循环:

@for (int i = 0; i < vm.TotalPages; i++)
{
    var temp = i;
    <button id="pg-button-@temp " class="btn btn-primary btn-sm" type="button" onclick="@(() => GetTablePage(temp ))">@temp </button>
}

希望这对您有帮助...