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

Blazor基于对象列表生成NavLink时出现索引越界问题求助

问题原因

Blazor Server的渲染机制中,for循环的索引变量i属于捕获变量。组件渲染时,循环内部的UI片段会延迟执行,当组件后续因状态变更、路由切换等原因重新渲染时,循环已经执行完毕,i的值会等于porturls.Count,此时访问porturls[i]就会触发索引越界错误。

用原生<a>标签或移除@porturls[i].name时未暴露问题,是因为前者的绑定逻辑不会延迟引用循环变量,后者则跳过了越界的索引访问。

解决方案

推荐两种修复方式,都能继续使用NavLink组件:

方式1:改用foreach遍历列表

直接遍历porturls中的对象,彻底避开索引变量的捕获问题:

@foreach (var item in porturls)
{                        
    <li class="nav-item px-3">                               
           <NavLink class="nav-link" href="@item.url" Match="@NavLinkMatch.All">                            
                @item.name
           </NavLink>                                  
    </li>
}    

方式2:在for循环内定义局部变量捕获当前索引

如果必须保留for循环,在循环内部创建局部变量保存当前的i值,确保后续渲染时引用的是循环执行时的索引:

@for (int i = 0; i < porturls.Count; i++)
{
    var currentIndex = i;                        
    <li class="nav-item px-3">                               
           <NavLink class="nav-link" href="@porturls[currentIndex].url" Match="@NavLinkMatch.All">                            
                @porturls[currentIndex].name
           </NavLink>                                  
    </li>
}    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:22:09