Почему событие onChange InputText не запускается в Blazor? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующая бритвенная разметка в компоненте Blazor:

<div class="form-group row">
    <label for="name">Contact: </label>
    <InputText id="name" @bind-Value="Contact.Name" @onchange="NameChanged"></InputText>
</div>

Когда я изменяю имя контакта в форме и вкладку из элемента управления, метод NameChange никогда не вызывается. Есть ли что-то еще, что мне нужно сделать, чтобы вызвать событие onChange?

Ответы [ 3 ]

1 голос
/ 12 марта 2020

вы не можете одновременно выполнять привязку и @onchange

0 голосов
/ 13 марта 2020

Вы не можете сделать @bind-value и @onchange, потому что двунаправленное связывание подписывается на событие onchange.

Но вы можете сделать это вручную:

<div class="form-group row">
    <label for="name">Contact: </label>
    <InputText id="name" Value="@Contact.Name" ValueChanged="NameChanged" ValueExpresions="() => Contact.Name" ></InputText>
</div>

@code {
    private void NameChanged(string value)
    {
        Contact.Name = value;
    }
}
0 голосов
/ 12 марта 2020

Попробуйте использовать при вводе (при вводе каждого символа) или при размытии - при переходе от поля.

<InputText id="name" @bind-Value="Contact.Name" @oninput="NameChanged" @onblur="NameChanged"></InputText>

bind-value использует @onchange для обновления значения компонента. Поэтому вы не можете использовать их вместе.

Из документации MS :

Использование @bind со свойством CurrentValue () по сути эквивалентно следующему:

<input value="@CurrentValue"
    @onchange="@((ChangeEventArgs __e) => CurrentValue = 
        __e.Value.ToString())" />

@code {
    private string CurrentValue { get; set; }
}
...