.NET 8 Razor Pages如何修改数据注解默认错误消息及小数分隔符
.NET 8 Razor Pages 全局修改表单验证错误语言及小数分隔符方案
一、全局替换DataAnnotations默认验证消息语言
无需逐个修改模型类添加特性,通过全局配置+资源文件实现多语言验证消息:
1. 安装对应语言的DataAnnotations包
以意大利语为例,安装NuGet包:
Install-Package Microsoft.AspNetCore.Mvc.DataAnnotations.it
2. 配置Program.cs的本地化服务
在Program.cs中添加本地化配置,指定资源文件路径并全局绑定数据注解本地化:
var builder = WebApplication.CreateBuilder(args); // 配置本地化资源路径(对应项目根目录的Resources文件夹) builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); builder.Services.AddRazorPages() .AddDataAnnotationsLocalization(options => { // 全局使用统一的资源文件,无需每个模型单独关联 options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(DataAnnotationsResources)); }); // 设置请求本地化规则,默认语言为意大利语 builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { new System.Globalization.CultureInfo("it-IT"), new System.Globalization.CultureInfo("en-US") }; options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("it-IT"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; }); var app = builder.Build(); // 启用请求本地化中间件(必须放在路由中间件之前) app.UseRequestLocalization(); // 其他中间件配置... app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
3. 创建本地化资源文件
在项目根目录创建Resources文件夹,添加DataAnnotations.it.resx资源文件,填入需要替换的验证消息键值对(键为DataAnnotations默认的验证消息标识):
| 键名 | 意大利语值 |
|---|---|
| Required | Il campo {0} è obbligatorio. |
| StringLength | Il campo {0} deve essere compreso tra {2} e {1} caratteri. |
| Decimal | Il campo {0} deve essere un numero decimale. |
二、解决小数分隔符验证问题
要让模型绑定和验证支持逗号作为小数分隔符,需确保请求文化生效并配置模型绑定规则:
1. 确保请求文化正确应用
上文的RequestLocalizationOptions配置已默认使用it-IT文化,该文化默认使用逗号作为小数分隔符,模型绑定会自动适配。
2. 客户端验证适配
客户端验证默认使用英文规则,需引入对应语言的jquery.validate本地化脚本:
- 下载意大利语本地化脚本(
messages_it.min.js),放到wwwroot/lib/jquery-validation/localization/目录下 - 修改
_ValidationScriptsPartial.cshtml,添加本地化脚本引用:
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script> <script src="~/lib/jquery-validation/localization/messages_it.min.js"></script>
效果验证
完成配置后:
- 提交空表单时,
Nome和Cognome字段会显示意大利语的必填错误提示 - 输入带逗号的小数(如
123,456)时,模型绑定和验证会正常识别,无需使用点分隔符
内容的提问来源于stack exchange,提问作者Giorgio F.
相关产品推荐
相关产品推荐

