0

2 番目のフィールドが最初のフィールドより大きくなければならないフールプルーフ検証を使用して、2 つの日付フィールドを比較したいと考えています。ただし、どちらも null にすることができます。PassOnNull = True を使用する場合でも、両方のフィールドが null の場合、検証は失敗します。これは [GreaterThanOrEqualTo] を使用して期待どおりに機能しますが、2 番目の日付はより大きくする必要があります。

[GreaterThan("DateFrom", PassOnNull = true, ErrorMessage = "Date To must be greater than Date From")]
public DateTime? DateTo { get; set; }

ソースを見ると、いずれかのフィールドが null (両方ではない) の場合、検証がバイパスされます。これには何らかの理由がありますか?これは本当に意味がありません。ソースは簡単に変更できますが、NuGet インストールなので、上書きされてしまいます。それ以外の場合は、手動で含めるだけで完了です。ソーススニペットは次のとおりです。

    if (passOnNull) {

        var isNullish = function (input) {
            return input == null || input == undefined || input == "";
        };

        var value1nullish = isNullish(value1);
        var value2nullish = isNullish(value2);

        if ((value1nullish && !value2nullish) || (value2nullish && !value1nullish))
            return true;
    }

次の変更は、必須フィールドには独自の検証を渡す必要があるため、考えられるほぼすべてのシナリオでより理にかなっています。

        if (value1nullish || value2nullish)
            return true;

これを検証する必要がある別の方法はありますか、それとも FoolProof には修正が必要ですか?

4

1 に答える 1