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

ASP.NET Core模型数据注解自定义ErrorMessage不显示

解决自定义验证错误信息不显示的问题

1. 修正属性的Setter访问权限

你的Title属性用了private set,ASP.NET Core模型绑定需要属性有公共setter(至少是internal set)才能正确绑定表单提交的值。如果setter是private,模型绑定无法为属性赋值,框架会触发默认的验证错误,而非你自定义的消息。

修改模型属性:

[Required(ErrorMessage = ValidationMessages.Required)]
[MaxLength(255, ErrorMessage = ValidationMessages.MaxLength)]
public string Title { get; set; } // 改为public set

2. 检查本地化配置是否覆盖自定义消息

如果项目启用了本地化(比如配置了AddLocalization),ASP.NET Core会默认使用内置的验证资源文件,可能覆盖你通过ErrorMessage指定的自定义内容。

可以通过以下方式调整,让自定义消息优先级更高:

builder.Services.AddControllersWithViews()
    .AddDataAnnotationsLocalization(options =>
    {
        // 指定自定义验证消息类作为本地化源,或直接禁用默认验证资源
        options.DataAnnotationLocalizerProvider = (type, factory) =>
            factory.Create(typeof(ValidationMessages));
    });

3. 确保服务器端验证被正确触发

在控制器的POST方法中,必须主动检查ModelState.IsValid,触发服务器端验证逻辑:

[HttpPost]
public IActionResult Create(CreateProductCategoryViewModel model)
{
    if (!ModelState.IsValid)
    {
        // 验证失败时返回视图,此时会显示自定义错误消息
        return View(model);
    }
    // 后续业务逻辑
}

4. 确认客户端验证脚本已正确引用

ASP.NET Core的客户端验证需要依赖三个脚本:jquery、jquery.validate和jquery.validate.unobtrusive,缺少这些脚本会导致客户端验证失效,服务器端验证消息也需要页面刷新才会显示。确保页面中添加:

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

5. 清除浏览器缓存

浏览器可能缓存了旧的验证脚本或资源,导致新的自定义消息无法加载。尝试清除浏览器缓存后重新测试。


内容的提问来源于stack exchange,提问作者Amirabbas Motamedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:29