Blazor手动设置表单数据后无法清除验证错误的问题求助
Blazor手动设置表单数据后无法清除验证错误的问题求助
各位大佬好,我最近在Blazor项目里用MudBlazor控件做表单,遇到了一个验证错误无法清除的问题,查了不少例子但都没解决,想请教下大家。
先给大家看看我的简化版表单代码:
<EditForm Model="@Claimant" OnValidSubmit="@AddClaim"> <DataAnnotationsValidator /> <MudTextField @bind-Value="@Claimant.AddressLine1" id="AddressLine1" Label="Address Line 1" Variant="Variant.Outlined" Margin="Margin.Dense" For="@(() => Claimant.AddressLine1)" MaxLength="100"> </MudTextField> <MudTextField @bind-Value="@Claimant.AddressLine2" Label="Address Line 2" Variant="Variant.Outlined" Margin="Margin.Dense" For="@(() => Claimant.AddressLine2)" MaxLength="100"> </MudTextField> <MudButton Variant="Variant.Filled" Disabled=@IsDisabled Style="display: inline-flex; justify-content: space-around; align-items: flex-start;" StartIcon="@Icons.Material.Filled.NoteAdd" Color="Color.Primary" ButtonType="ButtonType.Submit"> Submit Claim </MudButton> </EditForm>
当我空着表单点提交按钮时,会正常显示验证错误,这部分没问题。但我做了一个地址选择的功能:用户选中推荐地址后,我会手动给模型的几个字段赋值,代码如下:
protected Claimant Claimant { get; set; } = new(); private EditContext EC { get; set; } protected override async Task OnInitializedAsync() { EC = new EditContext(Claimant); await base.OnInitializedAsync(); } protected void SuggestedAddressClick() { var selectedAddress = SuggestedAddresses[(int)selectedValue]; if (selectedAddress != null) { // 手动赋值表单字段 Claimant.AddressLine1 = selectedAddress.Line1; Claimant.City = selectedAddress.City; Claimant.State = selectedAddress.StateProvince; Claimant.ZipCode = selectedAddress.PostalCode; // 尝试了几种清除验证错误的方法,但都没用 EC.Validate(); // 无效 EC.NotifyValidationStateChanged(); // 无效 EC.NotifyFieldChanged(EC.Field("AddressLine1")); // 无效 StateHasChanged(); } }
现在的问题是:手动赋值后,表单上能看到字段值确实更新了,模型里的值也对,但之前的验证错误就是不消失。只有再次点击提交按钮,或者点击每个字段再移开焦点时,错误才会清除。
我实在搞不清哪里出问题了,有没有大佬能指点下?
备注:内容来源于stack exchange,提问作者JimboJones
相关产品推荐
相关产品推荐

