我有版本5.0.11
为Microsoft.AspNetCore.Components.WebAssembly
. 我制作了以下页面和组件:
public class ViewModel
{
public string Value { get; set; }
}
@page "/"
<EditForm @ref="form" Model="vm">
<select type="text" @onchange="HandleChange">
<option label="Cat" value="Cat" />
<option label="Dog" value="Dog" />
<option label="Rat" value="Rat" />
</select>
<InputComponent @bind-Value="vm.Value"/>
</EditForm>
@code {
private EditForm form;
private readonly ViewModel vm = new();
private void HandleChange(ChangeEventArgs args)
{
vm.Value = args.Value?.ToString();
form.EditContext!.NotifyFieldChanged(FieldIdentifier.Create(() => vm.Value));
}
}
@inherits InputBase<string>
<h3>@myValue</h3>
@code {
private string myValue;
protected override void OnInitialized()
{
EditContext.OnFieldChanged += (_, __) => myValue = Value;
base.OnInitialized();
}
protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage)
{
throw new NotImplementedException();
}
}
当我从 select html 组件中选择一个值时,会调用 HandleChange 并通知编辑上下文有关更改的信息,但是当调用事件处理程序Value
时InputBase
保留旧值,尽管之前已vm.Value = args.Value?.ToString();
分配。
结果,当我第一次选择一个值时,假设“Rat”标题保持为空,第二次尝试当我选择“Dog”时,“Rat”出现在标题中。
如何在事件处理程序中读取输入的当前值?我尝试过CurrentValue
,Value
但没有成功。