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

如何检测Blazor的ValidationMessageStore是否存在任意错误消息?

解决方案

你不需要直接访问ValidationMessageStore的内部集合,通过关联的EditContext实例即可检测是否存在验证错误,有两种常用实现方式:

方式1:直接调用EditContext的验证状态查询方法

在提交逻辑或者渲染逻辑中,直接调用EditContext.GetValidationMessages()判断是否有返回值即可:

// 假设你的EditContext实例名为editContext
bool hasValidationErrors = editContext.GetValidationMessages().Any();

如果只需要检测特定字段的错误,也可以传入对应的FieldIdentifier参数:

var specificField = new FieldIdentifier(yourModel, nameof(yourModel.FieldName));
bool hasSpecificFieldError = editContext.GetValidationMessages(specificField).Any();

方式2:绑定EditContext的OnValidationStateChanged事件做缓存

如果表单验证触发频率很高,也可以监听验证状态变更事件,提前缓存错误状态,避免每次渲染都遍历所有验证消息:

private bool _hasValidationErrors;

protected override void OnInitialized()
{
    editContext.OnValidationStateChanged += (sender, args) =>
    {
        _hasValidationErrors = editContext.GetValidationMessages().Any();
        StateHasChanged();
    };
}

页面渲染使用示例

可以直接在提交按钮附近根据这个布尔值展示提示:

@if (_hasValidationErrors)
{
    <p class="text-danger">* 存在待修正的验证错误,请检查表单后再提交</p>
}
<button type="submit" disabled="@_hasValidationErrors">提交表单</button>

注意:EditContext.GetValidationMessages()会返回所有ValidationMessageStore中存储的验证消息,不管是手动添加的还是DataAnnotationsValidator自动生成的,都可以被正常统计到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:27:01