Blazor表单中InputNumber控件的DisplayName未在验证ErrorMessage中生效问题
问题根因
- Blazor 内置的
DataAnnotationsValidator在执行数据注解验证逻辑时,仅会读取模型本身的元数据,包括属性上标注的[DisplayName]特性、属性的原生定义名称,完全不会读取页面中对应Input控件上设置的DisplayName属性值,所以你在InputNumber上自定义的名称无法被数据注解的错误信息模板识别替换。 - Input控件的
DisplayName属性仅作用于两类场景:一是控件自身触发的字段级校验提示,二是和<ValidationMessage For="..." />字段级验证提示组件搭配使用的场景,不会影响全局DataAnnotationsValidator的执行逻辑。
适配动态字段名需求的解决方案
你需要根据用户角色动态切换展示名称、无法在模型上加固定 [DisplayName] 特性的场景,可选用以下任意方案解决:
- 弃用全局的
<ValidationSummary />组件,改用字段级的<ValidationMessage />组件,该组件会自动读取对应Input控件设置的DisplayName替换错误信息中的{0}占位符,示例代码如下:
<InputNumber class="m-sm-0 pl-sm-1 py-sm-1 form-control" @bind-Value="CustomerData.ID_CUSTOMER" DisplayName="FCI Key" /> <ValidationMessage For="() => CustomerData.ID_CUSTOMER" />
- 自定义实现验证器,替换默认的
DataAnnotationsValidator,在验证逻辑执行时注入当前用户角色对应的字段映射关系,动态替换错误信息中的属性名。 - 保留
<ValidationSummary />的前提下,在表单提交验证完成后,手动遍历EditContext中的验证错误集合,用角色对应的字段名批量替换错误信息里的原生属性名。
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

