Wie funktioniert die ASP.NET MVC ViewBag
? MSDN sagt, es ist nur eine Object
, was mich fasziniert, wie funktionieren "Magic" -Eigenschaften wie ViewBag.Foo
und Magic Strings ViewBag["Hello"]
tatsächlich?
Wie kann ich eine erstellen und in meiner ASP.NET WebForms-App verwenden?
Beispiele wären sehr dankbar!
asp.net
asp.net-mvc
viewbag
Aniket Inge
quelle
quelle
Antworten:
ViewBag
ist vom Typdynamic
, ist aber intern einSystem.Dynamic.ExpandoObject()
Es wird so deklariert:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
Deshalb können Sie Folgendes tun:
ViewBag.Foo = "Bar";
Ein Beispiel für einen Expander-Objektcode:
quelle
public object ViewBag { get; }
auf der MSDN-Seite für ViewBag steht , aber ich kaufe Ihre Behauptung, dass es eine istExpandoObject
. Ich mag den Vergleich mit ViewData hier : " Im Grunde ersetzt [ViewBag] magische Zeichenfolgen [in ViewData] ... durch magische Eigenschaften ". ; ^)public object ViewBag { get; }
auf MSDN sagt , Code sagt, es ist,dynamic ViewBag { get ..
was intern vom Typ DynamicViewDataEs ist ein dynamisches Objekt, dh Sie können ihm im Controller Eigenschaften hinzufügen und diese später in der Ansicht lesen, da Sie das Objekt im Wesentlichen so erstellen, wie Sie es tun, eine Funktion des dynamischen Typs. Siehe diesen MSDN-Artikel zur Dynamik. In diesem Artikel wird die Verwendung in Bezug auf MVC beschrieben.
Wenn Sie dies für Webformulare verwenden möchten, fügen Sie einer Basisseitenklasse wie folgt eine dynamische Eigenschaft hinzu:
Lassen Sie alle Ihre Seiten davon erben. In Ihrem ASP.NET-Markup sollten Sie in der Lage sein:
Das sollte funktionieren. Wenn nicht, gibt es Möglichkeiten, dies zu umgehen.
quelle
Das
ViewBag
ist einSystem.Dynamic.ExpandoObject
wie vorgeschlagen. Die Eigenschaften inViewBag
sind im WesentlichenKeyValue
Paare, bei denen Sie über den Schlüssel auf den Wert zugreifen. In diesem Sinne sind diese gleichwertig:quelle
ViewBag wird verwendet, um Daten von der Controller-Aktion an die Ansicht zu übergeben, um die übergebenen Daten zu rendern. Jetzt können Sie Daten mithilfe von ViewBag oder ViewData zwischen Controller Action und View übergeben. ViewBag: Dies ist eine Art dynamisches Objekt. Dies bedeutet, dass Sie dem Viewbag dynamisch neue Felder hinzufügen und auf diese Felder in der Ansicht zugreifen können. Sie müssen das Objekt von viewbag zum Zeitpunkt der Erstellung neuer Felder initialisieren.
Beispiel: 1. ViewBag erstellen: ViewBag.FirstName = "John";
quelle
ViewBag ist vom Typ dynamisch. Mehr kannst du nicht tun
ViewBag["Foo"]
. Es wird eine Ausnahme angezeigt . Die Indizierung mit [] kann nicht auf einen Ausdruck vom Typ 'System.Dynamic.DynamicObject' angewendet werden .Die interne Implementierung von
ViewBag
speichert Foo tatsächlich inViewData["Foo"]
(Typ von ViewDataDictionary), sodass diese beiden austauschbar sind.ViewData["Foo"]
undViewBag.Foo
.Und Umfang. ViewBag und ViewData dienen zum Übertragen von Daten zwischen den Aktionen des Controllers und dem Rendern von View.
quelle
ViewBag ist ein dynamischer Typ, mit dem Sie Werte dynamisch festlegen oder abrufen und beliebig viele zusätzliche Felder ohne eine stark typisierte Klasse hinzufügen können. Mit ihnen können Sie Daten vom Controller an die Ansicht übergeben. In der Steuerung ......
Im Hinblick auf
Was ich gelernt habe ist, dass beide die Eigenschaft zum Speichern des dynamischen Namens haben sollten, dh ViewBag.victor
quelle
quelle