ASP.NET MVC 2 Datenanmerkungen in einem dynamisch generierten Modell

8

Ich erstelle eine asp.net mvc 2-Anwendung, die mein Ansichtsmodell abhängig von Benutzereingaben dynamisch generiert. Einfach ausgedrückt, der Benutzer kann auswählen, welche Felder er in seiner Ansicht sehen möchte.

Da sich die Vorlagenhelfer stark auf Modelleigenschaften und -attribute (Datenanmerkungen) verlassen, müsste ich die Attribute während der Laufzeit irgendwie zum Ansichtsmodell hinzufügen. Keine Notwendigkeit zu sagen, dass dies keine einfache Aufgabe ist.

Was also empfehlen Sie mir in diesem Szenario? Ich bin nicht in der Lage, die Attribute statisch hinzuzufügen, also sollte ich fortfahren und versuchen, sie dynamisch hinzuzufügen, selbst wenn es viel Arbeit ist, oder sollte ich versuchen, einen anderen Ansatz zu verwenden?

Vielen Dank im Voraus!

Felipe

    
Felipe Lima 13.02.2010, 02:12
quelle

3 Antworten

3

Eine benutzerdefinierte Modellmappe würde Ihnen nur im Bindungsteil helfen. Es wird nicht mit den Vorlagen-Helfern oder anderen Features von ASP.NET MVC helfen.

Ich empfehle stattdessen, einen benutzerdefinierten Metadaten Anbieter zu schreiben, indem ich von ModelMetadataProvider und registrieren Sie Ihren Provider in global.asax mit ModelMetadataProviders . Ein benutzerdefinierter Metadatenanbieter kann seine Metadaten von einer beliebigen Stelle abrufen: CLR-Attribute, XML-Datei, Datenbank oder Zufallszahlengenerator. Der integrierte Datenannotationsanbieter verwendet natürlich CLR-Attribute.

Sie können sich den Quellcode des integrierten Metadatenanbieters für Datenanmerkungen ansehen, um ein Beispiel für die Implementierung eines Anbieters zu erhalten. Sie können den Quellcode von ASP.NET MVC 2 RC 2 von der CodePlex-Website herunterladen. Es könnte auch eine Implementierung im MVC-Futures-Projekt geben, aber ich bin mir nicht sicher.

    
Eilon 13.02.2010, 02:39
quelle
0

Es scheint so, als würden Sie einen benutzerdefinierten Ansichtsmodellbinder benötigen, der die Überprüfung dynamisch anwendet.

    
ongle 13.02.2010 02:32
quelle
0

Klingt nach Overkill (wenn ich es richtig verstehe) - das schafft Modelle im laufenden Betrieb. Sie nutzen nicht den Hauptvorteil von Modellen; Kompilieren Sie Zeitüberprüfungen.

Ich würde versuchen, für die Aufgabe spezifische Objekte (z. B. eine UserForm-Klasse, die eine Liste von UserFormFields-Klassen usw. hätte) in der Hand zu verwenden und sie nicht im Handumdrehen zu erstellen.

Bearbeiten: Ich schlage vor, nicht eine attributbasierte Validierung zu verwenden und Ihr Modell mit Validierung zu entwerfen. Ein Design wie unten könnte meinen Punkt besser erklären:

%Vor%     
ziya 13.02.2010 02:19
quelle