Blazor:使用 onchange 而不是绑定将初始值设置为选择

San*_*Riz 5 .net c# blazor

我们知道使用 InputSelect 我们不能同时使用 @bind-value 和 @onchange

如果我们使用后者(用 select 代替 InputSelect)我们如何设置一个不同于第一个的初始值?(例如,在此样本中设置为 2018 年,变量的值)

就像是 if (i == month) => selected

<select @onchange="ChangeYear">
    @for (int i = 2015; i < DateTime.Now.Year + 1; i++)
    {
        <option value="@i">@i</option>
    }
</select>

@code {

    int year = 2018;

    void ChangeYear(ChangeEventArgs e)
    {
        int year = Convert.ToInt32(e.Value.ToString());

        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Isa*_*aac 12

您可以通过多种方式实现它,例如,定义一个绑定到 select 元素的 value 属性的局部变量 SelectedYear,以及一个更新 SelectedYear 的更改事件。这实际上创建了双向数据绑定。

请注意,SelectedYear 被分配了一个默认值 2018

<select value="@SelectedYear" @onchange="ChangeYear">
    @for (int i = 2015; i < DateTime.Now.Year + 1; i++)
    {
        <option value="@i">@i</option>
    }
</select>

<p>@SelectedYear</p>

@code
 {
    private int SelectedYear { get; set; } = 2018;

    void ChangeYear(ChangeEventArgs e)
    {
        SelectedYear = Convert.ToInt32(e.Value.ToString());

    }
}
Run Code Online (Sandbox Code Playgroud)

我们知道使用 InputSelect 我们不能同时使用 @bind-value 和 @onchange

这是因为编译器添加了change事件处理程序,将InputSelect组件的Value(注意是@bind-Value,不是@bind-value)属性更新为新选择的值。这就是为什么你可以做这样的事情:

<p>@SelectedYear</p>

<EditForm Model="@employees">
    <DataAnnotationsValidator />
     <div>   
        <InputSelect @bind-Value="SelectedYear" Id="SelectedYear" Class="form-control">
            @for (int i = 2015; i < DateTime.Now.Year + 1; i++)
            {
                <option value="@i">@i</option>
            }
        </InputSelect>


    </div>
    <button type="submit">Ok</button>

</EditForm>

@code
 {
    private string SelectedYear { get; set; } = "2018";

    public List<Employee> employees = new List<Employee>();


    public class Employee
    {
        public int YearBorn { get; set; }
        public string Name { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于发现此问题的其他人,请注意,在使用“InputSelect”时,“@bind-Value”变量中的默认值仅在“Select”中“option”的“值”时才有效。如果您尝试将其设置为该“选项”的“文本”或“显示”,它肯定不起作用,并且您可能会花太多时间想知道为什么默认值不起作用!(并且您不会在任何地方收到任何错误,表明您尝试将其设置为不是值的“值”!) (2认同)

Hen*_*man 9

在 HTML 中,“selected”是选项的一个属性。Blazor 允许您使用布尔值进行切换:

<option value="@i" selected="@(i==year)">@i</option>
Run Code Online (Sandbox Code Playgroud)

其余代码可以保持原样。