1

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

验证有效,但未显示消息。我错过了什么吗?

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

4

1 回答 1

3

(我在FV 论坛上发布了相同的答案)

该消息未显示,因为它认为它与错误的属性相关联。当您使用 RuleFor(x => x.MonthlySalesGross.Value) 时,它会将规则与名为“Value”的属性相关联,而不是与 MonthlySalesGross 属性相关联。

FluentValidation v3 为 nullables 添加了更好的支持(我在博客中对此进行介绍),但目前这仅适用于常量值,不适用于引用其他属性的表达式。我计划扩展可空支持以使用 v3.1 的跨属性验证器,但现在您可以通过手动覆盖属性名称来解决此问题。这会将错误与正确的属性重新关联:

RuleFor(x => x.MonthlySalesGross.Value)
    .GreaterThan(x => x.MonthlySalesNet.Value)
    .When(x => x.MonthlySalesGross.HasValue)
    .OverridePropertyName("MonthlySalesGross");

(请注意,您还必须在 When 子句中包含一个空检查)。

于 2011-07-28T14:40:14.287 回答