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

.NET 8 Blazor:为何Razor中for循环渲染显示最终变量值?

Razor中for循环渲染变量始终为最终值的原因与解决方法

在Razor标记中使用for循环时,渲染出的变量总是循环的最终值而非递增的计数,为何会出现这种情况?我猜测这是设计如此,若果真如此,能否有人解释其原因与实现机制?查阅微软官网文档后,未找到Razor文件中for循环此行为的相关解释。

示例代码

<MudStack>
  @for (int x = 0; x < 5; x++) {
    <MudPaper>
      <MudText Typo="Typo.body1">
        @(x)
      </MudText>
    </MudPaper>
  }
</MudStack>

实际结果

渲染后所有内容均为循环的最终值:

5
5
5
5
5

期望结果

原本预期的递增输出:

0
1
2
3
4

原因分析

这是Razor延迟绑定特性导致的问题。循环变量x在整个for循环的作用域内是同一个实例,Razor并不会在循环执行时立即渲染组件,而是先构建组件树。当最终执行渲染逻辑时,循环已经完全结束,所有组件引用的都是同一个x变量的最终值(即循环结束时的5)。

解决方法

在循环内部创建一个局部变量,将当前x的值赋值给这个局部变量,让每个组件绑定到独立的变量实例上:

<MudStack>
  @for (int x = 0; x < 5; x++) {
    var currentX = x; // 用局部变量保存当前循环值
    <MudPaper>
      <MudText Typo="Typo.body1">
        @(currentX)
      </MudText>
    </MudPaper>
  }
</MudStack>

修改后,每个MudPaper组件都会绑定到各自的currentX变量,渲染时就能得到正确的递增数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:22:45