C# Blazor:使用onchange和notbind将初始值设置为select

C# Blazor:使用onchange和notbind将初始值设置为select,c#,.net,blazor,C#,.net,Blazor,我们知道,对于InputSelect,我们不能同时使用@bind value和@onchange 如果我们使用后者(选择而不是输入选择),我们如何设置与第一个不同的初始值?(例如,在2018年的样本集中,变量的值) 类似于if(i==month)=>selected <select @onchange="ChangeYear"> @for (int i = 2015; i < DateTime.Now.Year + 1; i++) { <o

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

如果我们使用后者(选择而不是输入选择),我们如何设置与第一个不同的初始值?(例如,在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());

        //...
    }
}

@对于(int i=2015;i

多亏了

您可以通过多种方式实现它,例如,定义绑定到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());

    }
}

@对于(int i=2015;i
@代码
{
private int SelectedYear{get;set;}=2018;
无效变更年(变更事件参数e)
{
SelectedYear=Convert.ToInt32(例如Value.ToString());
}
}
我们知道,对于InputSelect,我们不能同时使用@bind value和 @一旦改变

这是因为编译器添加了更改事件处理程序,以将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; }
    }
}
@SelectedYear

@对于(int i=2015;i
多亏了select的指向value=”“属性,我对此表示怀疑,但我被VS2019的Intellisense误导了,它不建议。。。我知道使用InputSelect更容易,但有时在ChangeEvent中我不得不做一些其他事情(启用/禁用UI片段、重新加载数据等)