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
相关产品推荐
相关产品推荐

