Wie kann ich eine benutzerdefinierte Validation verwenden, um sicherzustellen, zwei Eigenschaften entsprechen?

StackOverflow https://stackoverflow.com/questions/2595715

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);
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top