我目前正在通过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
集合的长度。
为什么会这样,我该如何克服呢?
答案 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>
}
希望这对您有帮助...