FluentValidation多字段总和校验如何同时高亮所有关联字段(MVC5)
FluentValidation 多字段联合校验高亮所有关联字段实现方案
该需求完全可以在MVC5的FluentValidation中实现,你之前用到的匿名对象校验写法默认只会给虚拟的匿名属性绑定错误,无法映射到实际模型字段,因此不会触发字段高亮,可采用Custom自定义验证器方案实现需求:
步骤1:模型定义示例
public class TargetModel { public decimal A { get; set; } public decimal B { get; set; } public decimal C { get; set; } public decimal D { get; set; } public decimal E { get; set; } }
步骤2:验证器编写
使用Custom方法自定义校验逻辑,校验不通过时给每个关联字段单独添加错误信息,MVC会自动识别字段对应的错误并高亮:
public class TargetModelValidator : AbstractValidator<TargetModel> { public TargetModelValidator() { RuleFor(x => x) .Custom((model, context) => { var sumAbc = model.A + model.B + model.C; var sumDe = model.D + model.E; if (sumAbc != sumDe) { const string errorMsg = "A、B、C的总和与D、E的总和不相等"; context.AddFailure(nameof(TargetModel.A), errorMsg); context.AddFailure(nameof(TargetModel.B), errorMsg); context.AddFailure(nameof(TargetModel.C), errorMsg); context.AddFailure(nameof(TargetModel.D), errorMsg); context.AddFailure(nameof(TargetModel.E), errorMsg); } }); } }
效果说明
MVC视图渲染时,只要字段存在对应的错误记录,会自动为字段添加input-validation-error等错误类,同时触发对应字段的校验提示,实现5个关联字段同时高亮的效果。
内容的提问来源于stack exchange,提问作者Echilon
相关产品推荐
相关产品推荐

