Search code examples
.netblazor-webassemblymudblazor

For Loop with MudSelect outputs all the same


So if I run the following code in my Blazor WASM application with MudBlazor.

<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>

I get a select box with 31 options that are all 32. I am not sure what I am doing wrong.

EDIT I can do the following, but I want to make sure I am not doing something incorrectly.

<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>

Solution

  • You use a variable day that is later updated (once for each iteration of the loop). To fix this add a local variable inside the loop and use that instead.

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