Blazor 怎么自定义表单验证消息

来源:这里教程网 时间:2026-02-21 17:33:10 作者:

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,跨字段逻辑用手动验证流。

相关推荐