【问题标题】:Select Control Set Initial Value选择控制集初始值
【发布时间】:2020-04-14 01:56:04
【问题描述】:

我们知道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());

        //...
    }
}

【问题讨论】:

    标签: c# .net blazor


    【解决方案1】:

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

    我们知道使用 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; }
        }
    }
    

    【讨论】:

    • 感谢指向我选择的 value="" 属性我怀疑这样做,但我被 VS2019 的 Intellisense 误导了,它不建议......我知道 InputSelect 是更容易,但有时在 ChangeEvent 中我必须做一些其他的事情(启用/禁用 UI 片段、重新加载数据等)
    • 对于发现此问题的任何其他人,请注意,在使用 InputSelect 时,您在 @bind-Value 变量中的默认值仅适用于 @ 中 optionvalue 987654327@。如果您尝试将其设置为textdisplay 来设置option,它肯定不起作用,您可能会花太多时间想知道为什么默认设置不起作用! (而且您在任何地方都没有收到任何错误,表明您尝试将其设置为 value 这不是价值!)
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多