1

Fluent Validation に問題があります。

検証を確認したいので、プロパティを別のプロパティよりも大きくする必要があります。コードは次のとおりです。

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

検証は機能していましたが、メッセージは表示されませんでした。私は何かを逃していますか?

10 進数を null 不可の型に変更して検証を再構成すると、エラー メッセージの検証が表示されました。それは私にとって奇妙です,,ありがとう

4

1 に答える 1

3

(同じ回答をFV フォーラムに投稿しました)

間違ったプロパティに関連付けられていると見なされるため、メッセージは表示されません。RuleFor(x => x.MonthlySalesGross.Value) を使用すると、ルールは MonthlySalesGross プロパティではなく「Value」というプロパティに関連付けられます。

FluentValidation v3 では、nullable のサポートが強化されています (これについては、こちらのブログを参照してください)。ただし、現時点では、これは定数値でのみ機能し、他のプロパティを参照する式では機能しません。v3.1 でクロス プロパティ バリデータと連携するように null 許容のサポートを拡張する予定ですが、現時点では、プロパティ名を手動でオーバーライドすることでこれを回避できます。これにより、エラーが正しいプロパティに再度関連付けられます。

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

(When句にnullチェックも含める必要があることに注意してください)。

于 2011-07-28T14:40:14.287 に答える