Könnte jeder Körper erklären, wann man es benutzt
- TempData
- ViewBag
- Daten anzeigen
Ich habe eine Anforderung, bei der ich einen Wert in einem Controller eins festlegen muss, dass der Controller zu Controller Zwei umleitet und Controller Zwei die Ansicht rendert.
Ich habe versucht, ViewBag zu verwenden. Der Wert geht verloren, wenn ich Controller Zwei erreiche.
Kann ich wissen, wann und welche Vor- oder Nachteile ich verwenden soll?
Vielen Dank
asp.net-mvc-3
Hari Gillala
quelle
quelle
Antworten:
Ermöglicht das Speichern von Daten, die für eine Umleitung überleben. Intern wird die Sitzung als Sicherungsspeicher verwendet. Nach der Umleitung werden die Daten automatisch entfernt. Das Muster ist das folgende:
Ermöglicht das Speichern von Daten in einer Controller-Aktion, die in der entsprechenden Ansicht verwendet wird. Dies setzt voraus, dass die Aktion eine Ansicht zurückgibt und nicht umleitet. Lebt nur während der aktuellen Anfrage.
Das Muster ist das folgende:
und in der Ansicht:
oder mit ViewData:
und in der Ansicht:
ViewBag
ist nur ein dynamischer WrapperViewData
und existiert nur in ASP.NET MVC 3.Abgesehen davon sollte keines dieser beiden Konstrukte jemals verwendet werden. Sie sollten Ansichtsmodelle und stark typisierte Ansichten verwenden. Das richtige Muster lautet also wie folgt:
Modell anzeigen:
Aktion:
Stark getippte Ansicht:
Nach dieser kurzen Einführung beantworten wir Ihre Frage:
und die entsprechende Ansicht (
~/Views/Two/Index.cshtml
):Die Verwendung von TempData hat auch Nachteile: Wenn der Benutzer auf der Zielseite F5 drückt, gehen die Daten verloren.
Persönlich benutze ich TempData auch nicht. Dies liegt daran, dass intern die Sitzung verwendet wird und ich die Sitzung in meinen Anwendungen deaktiviere. Ich bevorzuge einen ruhigeren Weg, um dies zu erreichen. Das heißt: In der ersten Controller-Aktion, die die Umleitung ausführt, speichern Sie das Objekt in Ihrem Datenspeicher und verwenden Sie die generierte eindeutige ID beim Umleiten. Verwenden Sie dann für die Zielaktion diese ID, um das ursprünglich gespeicherte Objekt zurückzurufen:
Die Ansicht bleibt gleich.
quelle
ViewBag.Title
für alle meine Ansichten eine Eigenschaft festgelegt, die in meiner verwendet wird_Layout.cshtml
Basisansichtsdatei verwendet wird. Ein anderer Fall, in dem ich es benutze, ist das Versenden von Info-Nachrichten (z. B. "Produkt erfolgreich gespeichert!") An die Benutzer. Ich habe ein generisches Markup eingefügtLayout.cshtml
, um eine Nachricht zu rendern, falls vorhanden. Dadurch kann ich eineViewBag.Message
beliebige Aktion festlegen . Die Verwendung einer ViewModel-Eigenschaft in beiden Fällen hat zu viele Nachteile.ViewBag
. Bitte beschreiben Sie ein bestimmtes reales Szenario, wenn ViewBag eine Verwendung hat. Da Sie sagen , dass es ist, ich zitiere eine leistungsstarke Ressource , ich denke , Sie einige spezifische Fälle, wo diese leistungsfähige Ressource ist mächtig . Da ich es in meiner Karriere noch nie benutzt habe, würde ich mich sehr freuen zu erfahren, wie Menschen diese mächtige Waffe benutzen.ASP.NET MVC bietet drei Optionen: ViewData, ViewBag und TempData zum Übergeben von Daten vom Controller an die Ansicht und bei der nächsten Anforderung. ViewData und ViewBag sind sich fast ähnlich und TempData übernimmt zusätzliche Verantwortung. Lassen Sie uns wichtige Punkte zu diesen drei Objekten diskutieren oder erhalten:
Ähnlichkeiten zwischen ViewBag & ViewData:
Unterschied zwischen ViewBag & ViewData:
ViewBag & ViewData Beispiel:
Im Hinblick auf:
TempData:
TempData ist auch ein Wörterbuch, das von der TempDataDictionary-Klasse abgeleitet und in einer Sitzung mit kurzer Lebensdauer gespeichert wird. Es ist ein Zeichenfolgenschlüssel und ein Objektwert. Der Unterschied besteht darin, dass der Lebenszyklus des Objekts. TempData speichert die Informationen für die Zeit einer HTTP-Anforderung. Dies bedeutet nur von einer Seite zur anderen. Dies funktioniert auch mit einer 302/303-Umleitung, da sie sich in derselben HTTP-Anforderung befindet. Hilft beim Verwalten von Daten, wenn Sie von einem Controller zu einem anderen Controller oder von einer Aktion zu einer anderen Aktion wechseln. Mit anderen Worten, wenn Sie umleiten, hilft „TempData“ dabei, Daten zwischen diesen Weiterleitungen zu verwalten. Es werden intern Sitzungsvariablen verwendet. Die Verwendung von temporären Daten während der aktuellen und nachfolgenden Anforderung bedeutet nur, dass sie verwendet werden, wenn Sie sicher sind, dass die nächste Anforderung zur nächsten Ansicht umgeleitet wird. Es erfordert eine Typumwandlung für komplexe Datentypen und eine Überprüfung auf Nullwerte, um Fehler zu vermeiden.
Der letzte Mechanismus ist die Sitzung, die wie die ViewData funktioniert, wie ein Wörterbuch, das eine Zeichenfolge für Schlüssel und ein Objekt für Wert verwendet. Dieser wird im Client-Cookie gespeichert und kann viel länger verwendet werden. Es bedarf auch weiterer Überprüfungen, um niemals vertrauliche Informationen zu erhalten. In Bezug auf ViewData oder ViewBag sollten Sie es intelligent für die Anwendungsleistung verwenden. Weil jede Aktion den gesamten Lebenszyklus einer regulären asp.net mvc-Anfrage durchläuft. Sie können ViewData / ViewBag in Ihrer untergeordneten Aktion verwenden. Achten Sie jedoch darauf, dass Sie es nicht zum Auffüllen der nicht verwandten Daten verwenden, die Ihren Controller verschmutzen können.
quelle
TempData
Im Grunde ist es wie bei einem DataReader, wenn Daten gelesen werden, gehen sie verloren.
Überprüfen Sie dieses Video
Beispiel
Wenn Sie den obigen Code beachten, hat RedirectToAction keine Auswirkungen auf die TempData, bis TempData gelesen wird. Sobald TempData gelesen wird, gehen Werte verloren.
Wie kann ich die TempData nach dem Lesen behalten?
Überprüfen Sie die Ausgabe in Aktionsmethode Test 1 und Test 2
Wenn Sie auf den obigen Code achten, gehen nach RedirectToAction sowie nach dem Lesen der Daten keine Daten verloren. Der Grund dafür ist, dass wir verwenden
TempData.Keep()
. ist dassAuf diese Weise können Sie es auch in anderen Controllern so lange beibehalten, wie Sie möchten.
ViewBag / ViewData
Die Daten bleiben in der entsprechenden Ansicht erhalten
quelle
TempData in Asp.Net MVC ist eine der sehr nützlichen Funktionen. Es wird verwendet, um Daten von der aktuellen Anforderung an die nachfolgende Anforderung zu übergeben. Mit anderen Worten, wenn wir während der Umleitung Daten von einer Seite auf eine andere Seite senden möchten, können wir TempData verwenden, aber wir müssen einige Überlegungen im Code anstellen, um diese Funktion in MVC zu erreichen. Weil die Lebensdauer von TempData sehr kurz ist und nur so lange liegt, bis die Zielansicht vollständig geladen ist. Wir können jedoch die Keep () -Methode verwenden, um Daten in TempData beizubehalten.
Weiterlesen
quelle
ViewBag, ViewData, TempData und View State in MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ASP.NET MVC bietet uns drei Optionen: ViewData, VieBag und TempData, um Daten vom Controller zur Ansicht und bei der nächsten Anforderung zu übergeben. ViewData und ViewBag sind sich fast ähnlich und TempData übernimmt zusätzliche Verantwortung.
Ähnlichkeiten zwischen ViewBag & ViewData:
Unterschied zwischen ViewBag & ViewData:
ViewBag & ViewData Beispiel:
In View rufen wir wie folgt auf:
TempData:
Das einzige Szenario, in dem die Verwendung von TempData zuverlässig funktioniert, ist die Umleitung. Dies liegt daran, dass eine Umleitung die aktuelle Anforderung beendet (und den HTTP-Statuscode 302 Objekt an den Client verschoben sendet) und dann eine neue Anforderung auf dem Server erstellt, um die umgeleitete Ansicht bereitzustellen.
Es erfordert eine Typumwandlung für komplexe Datentypen und eine Überprüfung auf Nullwerte, um Fehler zu vermeiden.
quelle
quelle
TempData ist immer bis zum ersten Lesen verfügbar. Sobald Sie es gelesen haben, ist es nicht mehr verfügbar. Es kann nützlich sein, eine Kurznachricht zu übergeben, um auch anzuzeigen, dass sie nach dem ersten Lesen nicht mehr angezeigt wird. ViewBag Es ist nützlicher, wenn Sie schnell Daten an die Ansicht übergeben. Normalerweise sollten Sie alle Daten über das Modell an die Ansicht übergeben. In einigen Fällen kommt das Modell jedoch direkt aus einer Klasse, die in einem datenbankähnlichen Entity-Framework zugeordnet ist Wenn Sie Ihr Modell nicht ändern möchten, um neue Daten zu übergeben, können Sie dies in den Viewbag stecken. ViewData ist nur eine indizierte Version von ViewBag und wurde vor MVC3 verwendet
quelle
Auch der Umfang unterscheidet sich zwischen Viewbag und Versuchendaten. viewbag basiert auf der ersten Ansicht (nicht zwischen Aktionsmethoden geteilt), aber Versuchungsdaten können zwischen einer Aktionsmethode und nur untereinander geteilt werden.
quelle