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