Beherrschung der bedingten Eigenschaftsvalidierung mit IvalIdatableObject
Die IValidatableObject
-Schinschnittstelle ist ein robustes Instrument für eine umfassende Objektvalidierung, insbesondere nützlich, um komplexe Objekte mit Abhängigkeiten mit interpropertischen Abhängigkeiten zu validieren. Diese Schnittstelle ermöglicht Validierungen, die von den Werten anderer Eigenschaften innerhalb desselben Objekts abhängen. Die Kombination dieser Eigenschaften der Eigenschaftsvalidierung (wie [Required]
oder [Range]
) erfordert jedoch eine sorgfältige Überlegung.
Die IValidatableObject.Validate()
-Methode liefert den Mechanismus, um diese bedingten Überprüfungen durchzuführen. Nehmen wir an, Sie müssen nur dann Prop1
und Prop2
validieren, wenn die Eigenschaft Enable
wahr ist. So würden Sie dies implementieren:
<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>
entscheidend, wenn Sie Validator.TryValidateObject()
verwenden, setzen Sie den Parameter validateAllProperties
auf false
. Dadurch wird verhindert, dass das Framework die Eigenschaften automatisch mit Attributen wie [Range]
validiert, wenn Enable
falsch ist, und sicherzustellen, dass Ihre bedingte Logik in Validate()
Vorrang hat. Dies ermöglicht eine saubere Trennung von Bedenken zwischen individueller Eigentumsvalidierung und bedingter, querer Eigentumsvalidierung.
Das obige ist der detaillierte Inhalt vonWie führe ich eine bedingte Eigenschaftsvalidierung mit IcalIdatableObject durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!