Ich sah die ViewBag
in MVC 3. Was ist der Unterschied zu ViewData
in MVC 2?
Antworten
Zu viele Anzeigen?Kann ich Ihnen empfehlen, beides nicht zu verwenden?
Wenn Sie Daten an Ihren Bildschirm "senden" wollen, senden Sie ein stark typisiertes Objekt (auch bekannt als ViewModel), weil es einfacher zu testen ist.
Wenn Sie an eine Art "Model" binden und zufällige "viewbag"- oder "viewdata"-Elemente haben, dann macht das automatisierte Tests sehr schwierig.
Wenn Sie diese verwenden, überlegen Sie, wie Sie umstrukturieren und nur ViewModels verwenden können.
Es gibt einige feine Unterschiede, die bedeuten, dass Sie ViewData und ViewBag auf etwas andere Weise als die View verwenden können. Ein Vorteil wird in diesem Beitrag beschrieben http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx und zeigt, dass das Casting im Beispiel durch die Verwendung der ViewBag anstelle von ViewData vermieden werden kann.
Nachfolgend finden Sie den Unterschied zwischen ViewData, ViewBag, TempData und Session. Kredit/kopiert askforprogram.in Folgen Sie dem Link für ein Codebeispiel, das ich hier nicht erwähnt habe.
-
ViewData in MVC
- ViewData ist eine Eigenschaft der Klasse ControllerBase.
- ViewData ist eine Art von Wörterbuchobjekt.
- ViewData ist eine Schlüssel-Wert-Wörterbuch-Sammlung.
- ViewData wurde in der Version MVC 1.0 eingeführt.
- ViewData funktioniert mit .Net Framework 3.5 und höher.
- Bei der Aufzählung muss eine Typkonvertierung des Codes vorgenommen werden.
- Das ViewData-Objekt speichert Daten nur für die aktuelle Anfrage.
-
ViewBag in MVC
- ViewBag ist eine Eigenschaft der Klasse ControllerBase.
- ViewBag ist ein Typ eines dynamischen Objekts.
- ViewBag ist eine Art von Objekt.
- ViewBag wurde in der Version MVC 3.0 eingeführt.
- ViewBag arbeitet mit .Net Framework 4.0 und höher.
- ViewBag verwendet die Eigenschaft und behandelt sie, so dass keine Typkonvertierung beim aufzählen.
- Das ViewBag-Objekt speichert Daten nur für die aktuelle Anfrage.
-
TempData in MVC
- TempData ist eine Eigenschaft der Klasse ControllerBase.
- TempData ist eine Art von Wörterbuchobjekt.
- TempData ist eine Schlüssel-Wert-Wörterbuch-Sammlung.
- TempData wurde in der Version MVC 1.0 eingeführt.
- TempData arbeitet mit .Net Framework 3.5 und höher.
- Bei der Aufzählung muss eine Typkonvertierung des Codes vorgenommen werden.
- Das TempData-Objekt wird verwendet, um Daten zwischen der aktuellen Anfrage und der nachfolgenden Anfrage zu speichern.
-
Sitzung in MVC
- Session ist eine Eigenschaft von Controller(Abstrakte Klasse).
- Session ist ein Typ von HttpSessionStateBase.
- Session ist eine Sammlung von Schlüsselwerten in einem Wörterbuch.
- Session wurde in der Version MVC 1.0 eingeführt.
- TempData arbeitet mit .Net Framework 1.0 und höher.
- Bei der Aufzählung muss eine Typkonvertierung des Codes vorgenommen werden.
- Das Session-Objekt speichert Daten für alle Anfragen. Gültig für alle Anfragen, läuft nie ab.
viewdata: ist ein Wörterbuch, das verwendet wird, um Daten zwischen View und Controller zu speichern. Sie müssen das View-Datenobjekt auf das entsprechende Modell im View übertragen, um Daten daraus abrufen zu können ...
ViewBag: ist eine dynamische Eigenschaft, die in ihrer Funktionsweise den Daten der Ansicht ähnelt. Sie ist jedoch besser, weil sie nicht in ihr entsprechendes Modell gecastet werden muss, bevor sie in der Ansicht verwendet wird ...
Auch wenn Sie vielleicht keinen technischen Vorteil haben, wenn Sie ein Format gegenüber einem anderen wählen das eine Format gegenüber dem anderen zu wählen, sollten Sie einige wichtige Unterschiede zwischen den beiden Syntaxen kennen. Ein offensichtlicher Unterschied ist, dass ViewBag nur funktioniert, wenn der Schlüssel, auf den Sie zugreifen ein gültiger C#-Identifikator ist. Wenn Sie zum Beispiel einen Wert in ViewData["Key With Spaces"] platzieren, können Sie auf diesen Wert nicht mit ViewBag zugreifen, da der Code nicht kompiliert werden kann. Ein weiterer wichtiger Punkt ist, dass Sie keine dynamischen Werte als Parameter an Erweiterungsmethoden übergeben können. an Erweiterungsmethoden übergeben können. Der C#-Compiler muss den tatsächlichen Typ jedes Parameters zur Kompilierungszeit kennen, um die richtige Erweiterungsmethode zu wählen. Wenn ein Parameter dynamisch ist, wird die Kompilierung fehlschlagen. Zum Beispiel wird dieser Code immer fehlschlagen: @Html.TextBox("Name", ViewBag.Name). Um dies zu umgehen, können Sie entweder ViewData["Name"] verwenden oder die va