2010-02-26 10 views
6

Ich habe eine ASP.NET MVC-Anwendung mit einigen Dropdown-Listen und Multi-Auswahllisten. Im Wesentlichen viele Listen von Optionen.ASP.NET MVC-Modell vs ViewData für Select-Listen

Meine Frage ist; Ist es besser, diese Listen als Teil des Modells oder als ViewData an die Ansicht zu übergeben?

Ich übergebe sie gerade als ViewData, da ich sie nicht wirklich auf dem Modell brauche und sie für die Weitergabe auf dem Modell potentiell sperrig erscheinen (ich bekomme das ausgewählte Objekt oder die Objekte, was wirklich alles ist, was ich brauche). Auf der anderen Seite muss ViewData auf die View angewendet werden, was nicht so gut ist wie das stark typisierte Modell.

Gibt es hier eine Best Practice? Selbst Vorschläge für das Für und Wider für beide würden geschätzt.

Antwort

6

Ich empfehle Ihnen ViewModels, um diese Daten zu übergeben. Es ist fehleranfällig, ViewData mit "magischen Zeichenfolgen" zu verwenden, und ich bevorzuge es, intellisense zu verwenden, anstatt zu versuchen, sich an "magische Zeichenfolgen" zu erinnern. Und Sie müssen diese SelectLists nicht im Controller erstellen. Verwenden Sie einfach IEnumerable und verwenden Sie in der Ansicht die Erweiterungsmethode ToSelectList von MvcContrib.

+1

+1 Aus Gründen der Konvention haben wir alles getan, um magische Saiten zu entfernen. Nicht nur für das, was du erwähnt hast, denn Intellisense ist fantastisch, aber der eigentliche Kick ist, dass magische Strings immer gut zusammenpassen. Dann haben sie die Möglichkeit, zur Laufzeit zu explodieren. Autsch ... Stark typisierte Dinge explodieren zur Kompilierzeit, wodurch Fehler viel leichter zu erkennen sind. –

-1

Ich neige dazu, ViewData zu verwenden, wenn ich nur 1 Artikel habe, den ich an die Ansicht übergebe. Wenn Sie also mehrere Objekte senden und mehrere Dropdown-Felder ausfüllen müssen, würde ich ein Ansichtsmodell erstellen. Ich würde dieses Ansichtsmodell auch im Web-App-Projekt erstellen. Wenn Ihr Ansichtsmodell also über SelectList-Objekte verfügt, benötigen Sie in Ihrem Domänenmodell keinen Verweis auf die MVC-DLL.

+0

Und das ist eine gute Sache? – Lankymart