如何检测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
相关产品推荐
相关产品推荐

