ASP.NET MVC中日语线程下data-val-number验证错误消息乱码求助
解决EF结合jquery.validate.unobtrusive.js日语线程下data-val-number乱码问题
碰到这种只有data-val-number验证消息在日语线程下乱码、其他验证提示正常的情况,大概率是.NET默认的本地化资源在日语文化下出了损坏或编码异常,咱们可以从这几个方向入手解决:
1. 排查.NET默认本地化资源文件
.NET的NumberAttribute对应的错误消息是从系统资源文件System.ComponentModel.DataAnnotations.resources.dll中读取的,日语版本(对应ja-JP文化)的资源文件可能存在损坏或者编码问题:
- 找到项目依赖的.NET框架/.NET Core的本地化资源目录(比如.NET Framework下是
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ja-JP,.NET Core则在SDK的本地化资源文件夹) - 检查
System.ComponentModel.DataAnnotations.resources.dll是否正常,或者尝试替换为干净的同版本资源文件 - 也可以尝试更新.NET SDK/框架到最新稳定版,修复可能存在的资源文件bug
2. 手动指定验证消息绕过系统资源
如果不想折腾系统资源文件,最直接的办法是在实体类的属性上手动控制验证消息,不管是硬编码日语内容,还是用自定义本地化资源:
硬编码日语消息示例
[Required] [Range(1, int.MaxValue, ErrorMessage = "IntKeyは数値でなければなりません。")] public int IntKey { get; set; }
自定义本地化资源示例
- 创建一个.resx资源文件(比如
ValidationResources.ja.resx),添加键值对:IntKey_NumberError= "IntKeyは数値でなければなりません。" - 在属性上引用自定义资源:
[Required] [Range(1, int.MaxValue, ErrorMessageResourceType = typeof(ValidationResources), ErrorMessageResourceName = "IntKey_NumberError")] public int IntKey { get; set; }
这样就能完全规避系统默认资源的乱码问题。
3. 确认页面和项目编码设置
- 确保页面HTML头部包含正确的编码声明:
<meta charset="UTF-8">
- 检查项目中所有自定义资源文件的编码为
UTF-8(Visual Studio中右键资源文件→属性→高级→编码选择“UTF-8带签名”)
4. 清理缓存
有时候旧的乱码资源会被缓存,导致新设置不生效:
- 清理服务器端的ASP.NET缓存(可以重启应用池或网站)
- 清理浏览器缓存,或者用无痕模式测试页面
内容的提问来源于stack exchange,提问作者Chi.che
相关产品推荐
相关产品推荐

