FLuentValidation中的Nullable类型未显示错误消息

时间:2011-07-28 07:43:17

标签: c# .net asp.net-mvc-3 fluentvalidation

我的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");

验证工作正常,但未显示消息。我错过了什么吗?

当我将十进制更改为不可为空类型并重新配置验证时,显示了错误消息验证。这对我来说很奇怪,谢谢

1 个答案:

答案 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子句包含空检查。)