Blazor 自定义表单验证消息主要靠重写
EditContext的验证逻辑,或使用
DataAnnotationsValidator配合自定义特性,也可以直接用
ValidationMessageStore手动控制错误提示。核心不是改 UI 样式,而是替换或干预验证触发时的错误文本来源。
用 DataAnnotations + 自定义 ValidationAttribute
这是最常用、最清晰的方式,适合字段级规则(如邮箱格式、长度限制):
继承ValidationAttribute,重写
IsValid和
FormatErrorMessage在模型属性上应用该特性,支持内建的
DataAnnotationsValidator错误消息可硬编码,也可从资源文件(
.resx)读取,实现多语言
示例:
[MyRequired(ErrorMessage = "此项不能为空")]
public string Name { get; set; }
用 EditContext.ValidationMessageStore 动态添加错误
适合运行时校验(比如调用后端接口后返回的业务错误),不依赖数据注解:
获取组件内的EditContext实例(通常在
OnInitialized中) 创建
ValidationMessageStore并绑定到它 调用
Add方法传入字段名和自定义消息,再触发
NotifyValidationStateChanged()对应字段旁的
<validationmessage for="@(() => model.Name)"></validationmessage>会自动显示
全局替换默认验证消息模板
如果想统一修改所有
RequiredAttribute或
EmailAddressAttribute的提示语,不用每个地方都写 ErrorMessage: 在
Program.cs或
Startup.cs中,注册自定义的
IStringLocalizer或直接设置
ValidationOptions更轻量的做法:通过反射替换
ValidationAttribute.ErrorMessageResourceType对应的资源类,或用
ValidationAttribute.FormatErrorMessage做统一拦截
绕过 DataAnnotations,完全手动控制验证流
适合复杂联动校验(比如“密码”和“确认密码”必须一致,且不能等于用户名):
移除DataAnnotationsValidator组件 在
EditContext上监听
OnValidationRequested和
OnFieldChanged自己实现校验逻辑,用
ValidationMessageStore添加/清除错误 这样消息内容、触发时机、字段粒度全由你掌控
基本上就这些。不需要引入第三方库,Blazor 内置机制已足够灵活。关键是选对层级:简单字段规则用特性,动态业务错误用 MessageStore,跨字段逻辑用手动验证流。
