2011-07-28 8 views
1

Fluent Validationに問題があります。FLuentValidationのNullable型のエラーメッセージが表示されない

検証をチェックして、プロパティを別のプロパティよりも大きくする必要があります。ここ はコードです:

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進数をヌル入力不可能な型に変更し、検証を再構成したときにエラーメッセージの検証が表示されました。私のために奇妙なそれ `s ,,おかげ

+0

私はcodeplexの流暢な検証フォーラムでクロスポストを行っています。 ここに答えがあります:http://fluentvalidation.codeplex.com/discussions/266845 – Rivera

答えて

2

は、それはそれは間違ったプロパティに関連付けられていると考えているため、メッセージが表示されません

を(私はFV forumに同じ答えを超える掲載しました)。 RuleFor(x => x.MonthlySalesGross.Value)を使用すると、MonthlySalesGrossプロパティではなく、「Value」というプロパティにルールが関連付けられます。

FluentValidation v3では、nullableのサポートが強化されています(これはhereです)。現在のところ、これは他のプロパティを参照する式ではなく、定数でのみ機能します。 v3.1でクロスプロパティバリデーターを使用するためのnullableサポートを拡張する予定ですが、今のところ、プロパティ名を手動でオーバーライドすることで回避できます。これは、正しいプロパティでエラーを再関連付けます:

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

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

関連する問題