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

Blazor WASM中MudSelect循环渲染选项全为32的问题咨询

Blazor WASM中MudSelect循环生成选项全部显示为32的问题解决

原代码问题原因

你最初的代码出现所有选项显示32,是因为Blazor的@for循环存在闭包捕获变量的陷阱:

<MudSelect T="int?" @bind-Value="_registerProfileViewModel.DayOfBirth" Label="Day:" Variant="Variant.Outlined">
    @for (var day = 1; day <= 31; day++)
    {
        <MudSelectItem T="int?" Value="@day">@day</MudSelectItem>
    }
</MudSelect>

循环变量day是一个共享的引用变量,所有MudSelectItem在渲染时都会绑定到同一个day的引用上。当循环执行完毕,day的值已经递增到32,因此所有选项最终显示的都是这个最终值。

修改后的代码正确性说明

你后来的写法是完全正确的,完美解决了闭包陷阱问题:

<MudSelect T="int?" @bind-Value="_registerProfileViewModel.DayOfBirth" Label="Day:" Variant="Variant.Outlined">
    @for (var day = 1; day <= 31; day++)
    {
        var number = day;
        <MudSelectItem T="int?" Value="@number">@number</MudSelectItem>
    }
</MudSelect>

通过在循环内部声明局部变量number,每次迭代都会创建一个独立的变量实例,每个MudSelectItem绑定的都是当前迭代的number值,这样就能正确渲染1到31的所有日期选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:06