如何使用FluentValidation覆盖int类型InputNumber的默认错误提示信息?
解决InputNumber验证时无法覆盖默认数字错误消息的问题
出现默认的"The field FieldName must be a number."提示,是因为空值触发的是ASP.NET Core模型绑定阶段的类型转换错误,此时FluentValidation的NotEmpty/NotNull规则还没执行,所以自定义消息不会生效。以下是几种可行的解决方式:
方法1:将字段改为可空数字类型
把模型中的数字字段改成可空类型(如int?、decimal?),这样空值能成功绑定到模型,FluentValidation的规则就会触发,自定义消息就能正常显示:
模型类
public class YourModel { public int? FieldName { get; set; } }
验证器规则
RuleFor(model => model.FieldName) .NotNull().WithMessage("请输入数字") .NotEmpty().WithMessage("请输入数字");
方法2:覆盖模型绑定的默认错误消息
直接配置ASP.NET Core的模型绑定消息,替换默认的类型转换错误提示:
// 在Program.cs/Startup.cs中配置 builder.Services.AddControllersWithViews() .AddMvcOptions(options => { // 替换"必须是数字"的默认提示 options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor( fieldName => $"字段 {fieldName} 请输入有效的数字"); });
方法3:使用FluentValidation的Must规则自定义检查
同样需要字段为可空类型,通过Must规则手动验证值是否存在:
RuleFor(model => model.FieldName) .Must(value => value.HasValue) .WithMessage("请填写有效的数字内容");
内容的提问来源于stack exchange,提问作者Kosodrzewina
相关产品推荐
相关产品推荐

