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
相关产品推荐
相关产品推荐

