ViewBag vs Model, in MVC.NET [geschlossen]

8

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

    
DotNet98 12.02.2014, 01:42
quelle

5 Antworten

11

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:

  1. Fügen Sie jedem Modell die Layouteigenschaften hinzu.

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.

  1. Lassen Sie alle Ihre Modelle von einer Klasse erben, die die Layoutdaten enthält.

Ich vermeide es, eine Klasse ModelBase zu erstellen, aber manchmal kann es notwendig sein.

  1. Erstellen Sie ein Modell für das Layout und eine generische Modell-Basisklasse.

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%
  1. Legen Sie Layouteigenschaften in 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:

%Vor%

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:

%Vor%

Wenn Sie also ViewBag verwenden müssen, würde ich Ihnen Folgendes empfehlen:

%Vor%     
David Schwartz 11.05.2015 17:37
quelle
5

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:

Avoid Viewbag

    
Deddy H 12.02.2014 06:07
quelle
3

Beim Übergeben von Informationen an das Layout Ihrer Ansicht

    
Brad Thomas 12.02.2014 02:07
quelle
2

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.

    
Gjohn 12.02.2014 01:57
quelle
0

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.

    
ZAK 29.05.2014 17:43
quelle