You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor应用循环中向ChangePages函数传值错误的问题求助

Blazor分页循环变量传递值错误的解决方法

你遇到的是Blazor中lambda表达式捕获循环变量的常见问题:@for循环里的lambda表达式绑定@onclick时,捕获的是循环变量i的引用,而非每次迭代的当前值,所以所有点击事件最终都会使用循环结束时i的最终值。

解决方法一:创建局部变量保存当前循环值

在循环内部新增一个局部变量,存储当前迭代的页码值,让lambda表达式捕获这个局部变量的副本:

<nav aria-label="">
     <ul class="pagination">
         ...
                
        @for (var i = PaginationInfo.StartNavigationPage; 
                  i <= PaginationInfo.StopNavigationPage;
                  i++)
        {
              var currentPage = i; // 保存当前迭代的页码值
              <li class="page-item"
                        @onclick="(async () => ChangePages(currentPage))">
                  <a class="page-link @PaginationInfo.ClassByPageNumber(i)"
                     href="/journal/@i">@i</a>
              </li>
         }
                
        ...
      </ul>
   </nav>

每次循环迭代时,currentPage会被赋值为当前i的副本,lambda表达式引用这个局部变量,点击时就能传递正确的页码。

解决方法二:使用@foreach循环替代@for循环

将页码范围转换为一个集合,通过@foreach循环遍历,foreach每次迭代会创建独立的变量,避免引用共享变量的问题:

<nav aria-label="">
     <ul class="pagination">
         ...
                
        @{
            // 生成页码集合
            var pageNumbers = Enumerable.Range(
                PaginationInfo.StartNavigationPage, 
                PaginationInfo.StopNavigationPage - PaginationInfo.StartNavigationPage + 1
            );
        }

        @foreach (var page in pageNumbers)
        {
              <li class="page-item"
                        @onclick="(async () => ChangePages(page))">
                  <a class="page-link @PaginationInfo.ClassByPageNumber(page)"
                     href="/journal/@page">@page</a>
              </li>
         }
                
        ...
      </ul>
   </nav>

foreach循环中的page变量在每次迭代时都是新的实例,lambda表达式捕获的是当前迭代的page值,点击时即可传递正确页码。

内容的提问来源于stack exchange,提问作者3xGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:15:01