属性を追加することはできますが、検証結果が返されるときIgnoreNullsに複雑になります。ValidationResultsこれは、検証ブロックが暗黙的にバリデーターをラップするためですOrCompositeValidator。プロパティは null にすることも、指定された範囲の整数にすることもできます。
検証が失敗した場合、最上位の検証結果はOrCompositeValidator. 実際の検証結果を取得するには、オブジェクトのプロパティにRangeValidatorドリルダウンする必要があります。NestedValidationResultsValidationResult
これは検証結果メッセージを処理するのに大変な作業のように思えるので、もっと良い方法が必要だと私には思えました。
これが私がしたことです。
IgnoreNullStringLengthValidatorを継承するというクラスを作成しましたStringLengthValidator(ここでは を継承しますRangeValidator)。
- 基本コンストラクターをサポートするために必要なすべてのコンストラクターを作成します。
メソッドをオーバーライドDoValidateし、null 値をチェックします。ここでは、次のように記述します。
if (!objectToValidate.HasValue) return;
- コードの次の行が を呼び出していることを確認してください
base.DoValidate(...)。
IgnoreNullStringLengthValidatorAttributenew を返すという属性クラスを作成しましたIgnoreNullStringLengthValidator。ここで、IgnoreNullRangeValidatorAttributeクラスを作成します。
結果として得られる検証結果は、バリデーターを暗黙的にネストしないため、期待どおりのものになります。