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

Blazor中向ValidationMessageStore新增错误后ValidationSummary未更新问题

问题解决方案

问题本质是手动往ValidationMessageStore添加错误后,没有通知EditContext校验状态发生了变更,仅调用StateHasChanged只能触发组件重渲染,但ValidationSummary组件是监听EditContext的校验状态变更事件来更新错误展示的,因此不会刷新。

修复步骤

替换ExecuteLogin方法里的StateHasChanged()调用,改为调用EditContext的NotifyValidationStateChanged()方法,该方法会主动触发所有校验相关组件的状态更新,包括ValidationSummary和对应字段的ValidationMessage。
修改后代码示例:

private async Task ExecuteLogin()
{
    var result = await _authenticationManager.Login(model);
    if (result.Succeeded)
    {
        // 登录成功逻辑:通知用户+跳转首页
    }
    else
    {
        // 先清空之前的自定义错误,避免重复叠加
        _messageStore?.Clear();
        foreach (var message in result.Messages)
        {
            if (message == "Invalid Credentials.")
            {
                _messageStore?.Add(() => model.Email, "Invalid Credentials");
                _messageStore?.Add(() => model.Password, "Invalid Credentials");
                _messageStore?.Add(() => model.Password, "Another Error for testing");
            }
            else
            {
                // 其他错误处理逻辑
            }
        }
        // 所有错误添加完成后,统一通知EditContext校验状态变更
        editContext?.NotifyValidationStateChanged();
    }
}

可复用优化建议

如果要在多个场景复用自定义校验错误添加逻辑,可以封装为EditContext的扩展方法,避免重复写代码:

public static class EditContextExtensions
{
    public static void AddCustomFieldError<T>(this EditContext editContext, Expression<Func<T>> fieldAccessor, string errorMessage, ValidationMessageStore messageStore)
    {
        messageStore.Add(fieldAccessor, errorMessage);
    }

    public static void RefreshValidationDisplay(this EditContext editContext)
    {
        editContext.NotifyValidationStateChanged();
    }
}

补充说明

你之前修改输入内容时所有错误都能显示,是因为输入操作会触发EditContext的OnFieldChanged事件,该事件会连带触发校验状态更新,因此之前存在ValidationMessageStore里的错误也会被同步渲染到ValidationSummary中。

内容的提问来源于stack exchange,提问作者Taladan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:04