You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:02:59