kann ich Ihre missliche Lage sehen. Ich suche nach anderen Validierungslösungen auch im Hinblick auf komplexe Validierungsregeln, die für mehr als eine Eigenschaft auf einem bestimmten Modellobjekt oder sogar für viele Eigenschaften von verschiedenen Modellobjekten in einem Objektdiagramm gelten können (wenn Sie unglücklicherweise genug haben, verknüpfte Objekte zu validieren) so was).
Die Einschränkung der Schnittstelle IDataErrorInfo
ist, dass ein Modellobjekt den gültigen Status erfüllt, wenn keine der Eigenschaften Fehler aufweist. Dies bedeutet, dass ein gültiges Objekt ist eines, wo alle seine Eigenschaften auch gültig sind. Jedoch kann ich eine Situation haben, in der, wenn Eigenschaft A, B und C gültig sind - dann das ganze Objekt gültig ist. aber auch wenn Eigenschaft A nicht gültig ist, aber B und C sind, dann erfüllt das Objekt die Gültigkeit. Ich habe einfach keine Möglichkeit, diese Bedingung/Regel mit den Attributen IDataErrorInfo
interface/DataAnnotations
zu beschreiben.
So fand ich diese delegate approach. Jetzt gab es viele hilfreiche Verbesserungen in MVC zum Zeitpunkt der Erstellung dieses Artikels nicht, aber das Kernkonzept sollte Ihnen helfen. Anstatt Attribute zur Definition der Validierungsbedingungen eines Objekts zu verwenden, erstellen wir Delegatfunktionen, die komplexere Anforderungen validieren, und weil sie delegiert sind, können wir sie wiederverwenden. Sicher, es ist mehr Arbeit, aber die Verwendung von Delegaten bedeutet, dass wir in der Lage sein sollten, schreiben Validierungsregel Code einmal und Speichern Sie alle Validierungsregeln an der einen Stelle (vielleicht Service-Schicht) und (das kool Bit) sogar verwenden MVC 2 DefaultModelBinder
, um die Überprüfung automatisch aufzurufen (ohne jede Menge Kontrolle in unseren Controller-Aktionen - wie Scott's Blog sagt, können wir mit DataAnnotations
machen. Siehe die last paragraph vor der Überschrift 'Stark typisierte UI-Helfer')!
Ich bin mir sicher, dass Sie den im obigen Artikel vorgeschlagenen Ansatz ein wenig mit anonymen Delegierten wie Func<T>
oder Predicate<T>
anreichern können und das Schreiben von benutzerdefinierten Codeblöcken für die Validierungsregeln aktiviert übergreifende Bedingungen (z. B. die von Ihnen genannte Bedingung wo, wenn Ihre ShippingSameAsBilling
Eigenschaft wahr ist, dann können Sie mehr Regeln für die Lieferadresse, usw. ignorieren).
DataAnnotations
dient dazu, einfache Validierungsregeln für Objekte wirklich einfach mit sehr wenig Code zu machen. Aber wenn sich Ihre Anforderungen entwickeln, müssen Sie komplexere Regeln validieren. Die neuen virtuellen Methoden im MVC2-Modellbinder sollten uns weiterhin Möglichkeiten bieten, unsere zukünftigen Validierungserfindungen in das MVC-Framework zu integrieren.
sehr nützlicher Artikel. Die ASP.NET MVC 2-Vorschau 1 verwendet Datenannotationen im DefaultModelBinder. aber es beantwortet nicht speziell meine Frage, aber danke für das Posten –