Dies ist eher eine allgemeine architektonische Frage:
Ich versuche zu entscheiden, ob es für meine Programmierer in Ordnung ist, "ViewBags" zu verwenden, um Daten an Ansichten zu übergeben, die bereits Models akzeptieren.
Meine persönliche Vorliebe besteht darin, ViewBags zu vermeiden und robuste Modelle zu erstellen, die alle Daten enthalten, die die Ansicht benötigt:
Ansatz 1:
%Vor%Ansatz 2:
%Vor%Kann jemand an ein Argument denken, warum Ansatz 2 besser wäre als Ansatz 1?
Danke für Ihre Eingabe
Meiner Meinung nach sollten Sie nie ViewBag
ohne einen sehr, sehr guten Grund verwenden . Brad Thomas 'Antwort weist auf ein seltenes Beispiel für einen dieser guten Gründe hin.
Sagen Sie, Sie haben einen Master Layout ( oder a Teilansicht ), die von einer ganzen Website und Dutzenden stark typisierten Ansichten geteilt werden, die jeweils ihr eigenes Modell haben. Wie leiten Sie Daten an das Layout weiter? Einige Strategien, die ich gesehen habe:
Wenn Sie nicht viele Modelle haben oder nur ein oder zwei zusätzliche Eigenschaften, könnte das funktionieren. Dies kann schnell zu einem Wartungsalbtraum werden.
Ich vermeide es, eine Klasse ModelBase
zu erstellen, aber manchmal kann es notwendig sein.
Ich habe MVC-Apps mit mehreren Layouts gesehen, die jede Ansicht verwenden könnte. Wenn Ihre Modelle von einer Basisklasse erben, benötigen Sie möglicherweise für jedes Layout eine Basisklasse. Um Doppelarbeit zu vermeiden, würde ich ein Layout-Modell für jedes der Layouts erstellen. Dann könnte so etwas für Sie funktionieren:
%Vor%ViewBag
fest.
Es gibt seltene Situationen, in denen ich mir vorstellen kann, dass die Layoutinformation im Modell nicht der richtige Aufruf ist. Es scheint ziemlich üblich zu sein, dass Benutzer ihre Domänenmodelle als ihr Modell verwenden, und Sie möchten beispielsweise keine Layout- / Ansichtsdaten mit den Geschäfts- / Domänendaten mischen.
Wenn Sie ViewBag
verwenden möchten, vermeiden Sie dies:
Es gibt offensichtliche potenzielle Probleme, wie die Verwendung unterschiedlicher Groß- und Kleinschreibung an verschiedenen Stellen (z. B. UserId
anstelle von UserID
). Weniger offensichtlich ist, dass jemand ViewBag.UserID
versehentlich auf string
oder Nullable<int>
setzen konnte:
Wenn Sie also ViewBag
verwenden müssen, würde ich Ihnen Folgendes empfehlen:
Persönlich werde ich Model als Parameter wählen, weil das Modell ein strenger Typ ist. Wenn es also zur Ansicht übergeben wird, können wir auch kontrollieren, ob unser Parameter gültig ist oder nicht im Feld keyword. Und das Modell ist der beste Weg für die zukünftige Codepflege.
Referenz dafür:
Kannst du es benutzen? Sicher. Sollten Sie es benutzen? Hängt davon ab, was du sonst noch machen willst. Normalerweise sehen Sie den ViewBag zum Senden von Daten wie den Titel der Seite oder etwas Ähnliches. Wahrscheinlich möchten Sie Parameter, die aus Ihrer Datenbank in Ihrem Modell gefüllt sind, behalten. Meistens wegen der Modellbindung und wenn Sie jemals eine Modellvalidierung durchführen wollten.
Es hängt davon ab, was das Szenario ist, wenn die Felder, die man passieren will, nur in dieser speziellen Ansicht verwendet werden und nicht als Teil einer Entität oder eines Modells gemacht werden, dann würde ich mit Viewbags gehen, sonst würde ich es machen ein Modell.
Tags und Links asp.net-mvc asp.net-mvc-viewmodel viewbag