我的Fluent验证有问题。
我想检查验证,因此必须填充属性大于另一个属性。 这是代码:
public decimal? MonthlySalesNet { get; set; }
public decimal? MonthlySalesGross { get; set; }
这是验证:
RuleFor(x => x.MonthlySalesGross.Value).GreaterThan(x => x.MonthlySalesNet.Value)
.When(x => x.MonthlySalesGross != null && x.MonthlySalesNet != null)
.WithMessage("blahblah");
验证工作正常,但未显示消息。我错过了什么吗?
当我将十进制更改为不可为空类型并重新配置验证时,显示了错误消息验证。这对我来说很奇怪,谢谢
答案 0 :(得分:2)
(我在FV forum上发布了相同的答案)
消息不显示,因为它认为它与错误的属性相关联。当您使用RuleFor(x => x.MonthlySalesGross.Value)时,它会将规则与名为“Value”的属性相关联,而不是与MonthlySalesGross属性相关联。
FluentValidation v3为nullables添加了更好的支持(我在博客上发表了这篇文章here),但目前这只适用于常量值,而不是引用其他属性的表达式。我打算扩展可空支持以使用v3.1的跨属性验证器,但是现在你可以通过手动覆盖属性名来解决这个问题。这将使错误与正确的属性重新关联:
RuleFor(x => x.MonthlySalesGross.Value)
.GreaterThan(x => x.MonthlySalesNet.Value)
.When(x => x.MonthlySalesGross.HasValue)
.OverridePropertyName("MonthlySalesGross");
(请注意,您还必须使用When子句包含空检查。)