Ich habe das ViewBag
in MVC 3 gesehen. Wie ist das anders als ViewData
in MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
user469652
quelle
quelle
Intern werden ViewBag- Eigenschaften als Name / Wert-Paare im ViewData-Wörterbuch gespeichert .
Hinweis: In den meisten Vorabversionen von MVC 3 wurde die ViewBag-Eigenschaft als ViewModel bezeichnet, wie in diesem Snippet aus den Versionshinweisen zu MVC 3 angegeben:
(bearbeitet am 08.10.12) Es wurde vorgeschlagen, die Quelle dieser von mir geposteten Informationen zu veröffentlichen. Hier ist die Quelle: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
quelle
ViewData
undViewBag
nicht nachViewModel
.dynamic
und unterstütztViewBag.Message
. Man benutzt die alteViewData["Message"]
Syntax.ViewBag vs ViewData in MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Ähnlichkeiten zwischen ViewBag & ViewData:
Unterschied zwischen ViewBag & ViewData:
ViewBag & ViewData Beispiel:
In View anrufen
quelle
typecasting
aber Sie haben nicht gezeigt, wie Typografie durchgeführt wirdViewData
: Es erfordert Typumwandlung für komplexe Datentypen und Überprüfung auf Nullwerte, um Fehler zu vermeiden.ViewBag
: Für komplexe Datentypen ist keine Typumwandlung erforderlich.Betrachten Sie das folgende Beispiel:
Und der Code für
View
lautet wie folgt:quelle
<h4>@ViewBag.emp.Name</h4>
sollte sich ändern zu<h4>@ViewBag.Employee.Name</h4>
Alle Antworten legen nahe, dass
ViewBag
und / oderViewData
Daten vonController
an übergeben werden sollenViews
der Fehlinformation ist. Beide sind sehr nützlich, um Daten von Ansichten an Layout oder teilweise an Ansichten (oder ViewComponents usw.) zu übergeben. Sie sind nicht exklusiv für Controller.Als Standardbeispiel für asp.net finden Sie dies auf der Layoutseite:
und in jeder Hinsicht
Also, um die Frage zu stellen: "Was ist der Unterschied zwischen
ViewBag
undViewData
?"Der bemerkenswerteste Unterschied ist
ViewData
ein stark typisiertes Wörterbuch, währendViewBag
es sich um einen dynamischen Typ handelt.Beachten Sie, dass die darin enthaltenen Daten die gleichen sind
Wann soll man das eine oder andere benutzen?
ViewBag
unterstützt keine ungültigen C # -Namen. Sie können nicht aufViewData["Key With Space"]
mitViewBag
ViewBag.Something
ist dynamisch und es können Probleme beim Aufrufen von Methoden (wie Erweiterungsmethoden) auftreten, die den genauen Parameter zur Kompilierungszeit kennen müssen.ViewBag
kann nach syntaktischen Reinigern für Nullen suchen:ViewBag.Person?.Name
ViewData
Haben Sie alle Eigenschaften eines Wörterbuchs wieContainsKey
,Add
etc., so dass Sie verwenden könnenViewData.Add("somekey", "somevalue")
, denken Sie daran, es könnte Ausnahmen auslösen.ViewData
von Ansichten ist TypeCasting erforderlich,ViewBag
dies jedoch nicht.Die subtilen Unterschiede zu kennen und das eine oder andere zu verwenden, ist viel mehr eine Geschmackspräferenz.
Normalerweise kann man
ViewBag.AnyKey
sich einen Alias von vorstellenViewData["AnyKey"]
quelle
Kann ich Ihnen empfehlen, auch nicht zu verwenden?
Wenn Sie Daten an Ihren Bildschirm "senden" möchten, senden Sie ein stark typisiertes Objekt (AKA ViewModel), da es einfacher zu testen ist.
Wenn Sie an eine Art "Modell" binden und zufällige "viewbag" - oder "viewdata" -Elemente haben, ist das automatisierte Testen sehr schwierig.
Wenn Sie diese verwenden, überlegen Sie, wie Sie möglicherweise ViewModels umstrukturieren und einfach verwenden können.
quelle
Es gibt einige subtile Unterschiede, die bedeuten, dass Sie ViewData und ViewBag auf etwas andere Weise als in der Ansicht verwenden können. Ein Vorteil wird in diesem Beitrag http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx beschrieben und zeigt dieses Casting kann im Beispiel vermieden werden, indem ViewBag anstelle von ViewData verwendet wird.
quelle
viewdata: ist ein Wörterbuch zum Speichern von Daten zwischen Ansicht und Controller. Sie müssen das Ansichtsdatenobjekt in das entsprechende Modell in der Ansicht umwandeln, um Daten daraus abrufen zu können ...
ViewBag: ist eine dynamische Eigenschaft, die in ihrer Arbeitsweise den Ansichtsdaten ähnelt. Es ist jedoch besser, da sie nicht in das entsprechende Modell umgewandelt werden muss, bevor sie in der Ansicht verwendet wird ...
quelle
Nachfolgend finden Sie den Punkt-zu-Punkt-Unterschied zu ViewData, ViewBag, TempData und Session. Credit / kopiert askforprogram.in , Folgen Sie dem Link für ein Codebeispiel, das ich hier nicht erwähnt habe.
ViewData in MVC
ViewBag in MVC
TempData in MVC
Sitzung in MVC
quelle
Obwohl Sie möglicherweise keinen technischen Vorteil bei der Auswahl eines Formats gegenüber dem anderen haben, sollten Sie sich einiger wichtiger Unterschiede zwischen den beiden Syntaxen bewusst sein. Ein offensichtlicher Unterschied besteht darin, dass ViewBag nur funktioniert, wenn der Schlüssel, auf den Sie zugreifen, eine gültige C # -Kennung ist. Wenn Sie beispielsweise einen Wert in ViewData ["Schlüssel mit Leerzeichen"] einfügen, können Sie mit ViewBag nicht auf diesen Wert zugreifen, da der Code nicht kompiliert werden kann. Ein weiteres wichtiges Problem ist, dass Sie keine dynamischen Werte als Parameter an Erweiterungsmethoden übergeben können. Der C # -Compiler muss zur Kompilierungszeit den tatsächlichen Typ jedes Parameters kennen, um die richtige Erweiterungsmethode auswählen zu können. Wenn ein Parameter dynamisch ist, schlägt die Kompilierung fehl. Beispielsweise schlägt dieser Code immer fehl: @ Html.TextBox ("name", ViewBag.Name). Um dies zu umgehen, verwenden Sie entweder ViewData ["Name"
quelle
quelle
Auf diese Weise können wir die Werte verwenden, um die Informationen zwischen dem Controller mit TEMP DATA an eine andere Seite zu übergeben
quelle
Ein Hauptunterschied zwischen ViewData und ViewBag ist:
ViewData: Das Objekt wird zurückgegeben, unabhängig davon, was Sie diesem Objekt zugewiesen haben, und muss erneut auf den ursprünglichen Typ zurückgesetzt werden.
ViewBag: Es ist klug genug, den genauen Typ zurückzugeben, den Sie ihm zugewiesen haben. Es spielt keine Rolle, ob Sie einen einfachen Typ (z. B. int, string usw.) oder einen komplexen Typ zugewiesen haben.
Beispiel: Controller-Code.
Code anzeigen.
OutPut-Bildschirm.
quelle
Daten anzeigen
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
quelle
- ViewData wird verwendet, um Daten vom Controller an die Ansicht zu übergeben
- Es wird von der ViewDataDictionary-Klasse abgeleitet
- Es ist nur für die aktuelle Anfrage verfügbar
- Erfordert Typisierung für komplexe Datentypen und sucht nach Nullwerten, um Fehler zu vermeiden
- Wenn eine Umleitung erfolgt, wird der Wert null
ViewBagquelle
Hier werden sowohl ViewData als auch ViewBag verwendet, um Daten vom Controller an View zu übergeben .
1. ViewData
- ViewData ist ein Wörterbuchobjekt, das von ViewDataDictonary abgeleitet ist Klasse .
- Daten erlauben nur eine Anforderung. ViewData-Werte werden gelöscht, wenn eine Seitenumleitung erfolgt.
- Der ViewData-Wert muss vor der Verwendung mit cate eingegeben werden.
Beispiel: In Controller
Im Hinblick auf
- Mit ViewData ist ein Paar wie Schlüssel und Wert , Nachricht ist Schlüssel und in ist Wert.
- Daten sind einfach, daher können wir hier keine Typumwandlung verwenden, wenn die Daten komplex sind, und dann Typumwandlung verwenden.
- In View können Daten als extrahiert werden
2. ViewBag
--ViewBag verwendet die dynamische Funktion. ViewBag-Wrapper um die ViewData.
- In ViewBag ist ein Casting erforderlich.
- Wie ViewData, wenn die Umleitung erfolgt, wird der Wert null.
Beispiel:
Im Hinblick auf
- Verwenden Sie für komplexe Typen ViewBag
- In View können Daten als extrahiert werden
- Der Hauptunterschied besteht darin, dass ViewBag keine Typumwandlung erfordert, ViewData jedoch eine Typumwandlung .
quelle
ViewBag und ViewData sind zwei Mittel, mit denen Informationen vom Controller an die Ansicht in ASP.Net MVC übergeben werden. Das Ziel der Verwendung beider Mechanismen besteht darin, die Kommunikation zwischen Controller und View bereitzustellen. Beide haben eine kurze Lebensdauer, dh der Wert von beiden wird null, sobald die Umleitung erfolgt ist, dh sobald die Seite von der Quellseite (wo wir den Wert von ViewBag oder ViewData festlegen) auf die Zielseite umgeleitet wurde, sowohl ViewBag als auch ViewData wird null.
Trotz dieser Ähnlichkeiten sind beide (ViewBag und ViewData) zwei verschiedene Dinge, wenn wir über die Implementierung von beiden sprechen. Die Unterschiede sind wie folgt:
1.) Wenn wir beide Implementierungsmethoden analysieren, werden wir feststellen, dass ViewData eine Wörterbuchdatenstruktur ist - ein Wörterbuch der Objekte, das von ViewDataDictionary abgeleitet ist und über Zeichenfolgen als Schlüssel für diese Werte zugänglich ist, während ViewBag die in C # 4.0 und C # 4.0 eingeführten dynamischen Funktionen verwendet ist eine dynamische Eigenschaft.
2.) Während wir auf die Werte von ViewData zugreifen, müssen wir die Werte (Datentypen) typisieren, da sie als Objekte im ViewData-Wörterbuch gespeichert sind. Es besteht jedoch keine solche Notwendigkeit, wenn wir im Fall von ViewBag auf den Wert zugreifen.
3.) In ViewBag können wir den Wert wie folgt einstellen:
und kann wie folgt zugreifen:
Im Fall von ViewData können die Werte wie folgt festgelegt und aufgerufen werden: Festlegen von ViewData wie folgt:
und Zugriff auf Wert wie diesen
Für weitere Details klicken Sie hier:
quelle