ivalidatableObjectを使用した条件付きプロパティ検証の習得
インターフェイスは、包括的なオブジェクト検証のための堅牢なツールであり、特にプロパティ間依存関係を持つ複雑なオブジェクトを検証するのに役立ちます。 このインターフェイスにより、同じオブジェクト内の他のプロパティの値に依存する検証が可能になります。 ただし、これを個々のプロパティ検証属性(やIValidatableObject
など)と組み合わせるには、慎重に検討する必要があります。
[Required]
[Range]
メソッドは、これらの条件付きチェックを実行するメカニズムを提供します。
を検証する必要があるとしましょう。 これを実装する方法は次のとおりです
IValidatableObject.Validate()
Prop1
重要なことに、Prop2
を使用する場合、Enable
パラメーターを
<code class="language-csharp">public class ValidateMe : IValidatableObject { [Required] public bool Enable { get; set; } [Range(1, 5)] public int Prop1 { get; set; } [Range(1, 5)] public int Prop2 { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (!Enable) { return Enumerable.Empty<ValidationResult>(); } var validationResults = new List<ValidationResult>(); // Add conditional validation rules here. For example: if (Prop1 < 1 || Prop1 > 5) { validationResults.Add(new ValidationResult("Prop1 must be between 1 and 5", new[] { nameof(Prop1) })); } if (Prop2 < 1 || Prop2 > 5) { validationResults.Add(new ValidationResult("Prop2 must be between 1 and 5", new[] { nameof(Prop2) })); } return validationResults; } }</code>
の条件付きロジックが優先されるようにします。 これにより、個々のプロパティ検証と条件付きクロスプロパティの検証との間の懸念のきれいな分離が可能になります。
以上がivalidatableObjectを使用して条件付きプロパティ検証を実行する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。