Umsetzung der bedingten Überprüfung in IvalIdatableObject: Attribut -Level -Eigenschaften und Szenen -basiertes Ignorieren
<:> Frage:
Ich weiß, dass beim Vergleich der Attribute zur Objektüberprüfung verwendet werden kann. Ich hoffe jedoch, Attribute zu verwenden, um ein einzelnes Attribut zu überprüfen und bestimmte Attribute in einigen Szenarien zu ignorieren. Ist meine Implementierung unten falsch?
Antwort: IValidatableObject
Die durch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 (!this.Enable)
{
}
else
{
}
}
}
|
Nach dem Login kopieren
bereitgestellte Implementierung kann verbessert werden, um die erforderlichen Bedingungen umzusetzen. Das Folgende ist eine alternative Methode:
verwendet <只>, nur wenn die Überprüfung fehlschlägt, wird das Überprüfungsergebnis zur
-Kollektion hinzugefügt. Wenn die Überprüfung erfolgreich ist, wird sie nicht hinzugefügt, was Erfolg bedeutet.
Ausführungsüberprüfung:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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)
{
var results = new List<ValidationResult>();
if (this.Enable)
{
Validator.TryValidateProperty(this.Prop1,
new ValidationContext(this, null, null) { MemberName = "Prop1" },
results);
Validator.TryValidateProperty(this.Prop2,
new ValidationContext(this, null, null) { MemberName = "Prop2" },
results);
if (this.Prop1 > this.Prop2)
{
results.Add( new ValidationResult( "Prop1 必须大于 Prop2" ));
}
}
return results;
}
}
|
Nach dem Login kopieren
Validator.TryValidateProperty()
setzen Sie <置> auf results
, um sicherzustellen, dass nur die Attribute von
Attributen überprüft werden können, sodass die Verarbeitungsbedingungen
Methoden überprüft werden können.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public void DoValidation()
{
var toValidate = new ValidateMe()
{
Enable = true,
Prop1 = 1,
Prop2 = 2
};
bool validateAllProperties = false;
var results = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(
toValidate,
new ValidationContext(toValidate, null, null),
results,
validateAllProperties);
}
|
Nach dem Login kopieren
Diese überarbeitete Antwort verwaltet das Originalbild und liefert eine prägnantere und genauere Erklärung des Codebeispiels, wobei sich die wichtigsten Verbesserungen konzentrieren und den Zweck von
klassifizieren. Die Codeblöcke sind auch für eine bessere Lesbarkeit formatiert >
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine bedingte Validierung in IvalIdatableObject mit Attributen auf Eigenschaftenebene und szenariobasiertem Ignorieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!