Wie kann ich eine benutzerdefinierte Validation verwenden, um sicherzustellen, zwei Eigenschaften entsprechen?
-
25-09-2019 - |
Frage
Wir verwenden xVal und die Standard-DataAnnotationsValidationRunner
beschrieben hier collect Validierungsfehler aus unseren Domain-Objekten und Ansicht Modellen in ASP.NET MVC. Ich möchte einen Weg haben, dass die Validierung Läufer haben zu identifizieren, wenn zwei Eigenschaften nicht durch die Verwendung von benutzerdefinierten DataAnnotations entsprechen.
Im Moment bin ich gezwungen, in sie außerhalb des Läufers zu tun, auf diese Weise:
if (!(model.FieldOne == model.FieldTwo))
errors.Add(new ErrorInfo("FieldTwo", "FieldOne must match FieldTwo", model.FieldTwo));
Meine Frage ist: kann dies geschehen mit property-Level-Validierung Attributen, oder bin ich gezwungen, in mit Klasse-Ebene Attributen (in diesem Fall würde ich den Läufer ändern muß ... und meine Follow-up-Frage würde sein, wie sie am besten in diesem Fall abzurufen).
Danke!
UPDATE: ich endlich herausgefunden, wie die Objektabfrage zu schreiben, um den Vorschlag in der ausgewählten Antwort zu implementieren; Ich concat die Ergebnisse dieser Abfrage mit den Ergebnissen des Standardvalidierungs läufer, wenn jemand neugierig war. Beachten Sie, dass ich die TypeId verändern das Bestätigungsfeld Eigenschaft sein.
var classErrorQuery =
from attribute in
instance.GetType().GetCustomAttributes(typeof (ValidationAttribute), false).Cast
<ValidationAttribute>()
where !attribute.IsValid(instance)
select new ErrorInfo(attribute.TypeId.ToString(), attribute.FormatErrorMessage(string.Empty), instance);
Lösung
finden Sie unter Schreibe eine CompareTo DataAnnotation Attribut
und auch können Sie die AccountMOdel im Standardprojekt von MVC2 überprüfen, Es ist ein Attribut PropertiesMustMatchAttribute zum ChangePasswordModel auf Validate angelegt, dass die NewPassword und ConfirmPassword Spiel