Was ist der Unterschied zwischen Viewdata und ViewBag?
-
11-10-2019 - |
Frage
ich sah den ViewBag
in MVC 3. Wie ist das anders als ViewData
in MVC 2?
Lösung
Es nutzt die C # 4.0 dynamische Funktion. Er erreicht das gleiche Ziel wie Bildschirmtextsystem und soll für den Einsatz von stark typisierten Ansicht Modellen (die gleiche Art und Weise wie Bildschirmtextsystem vermieden werden soll). Vermieden werden
Also im Grunde ersetzt es magic strings :
ViewData["Foo"]
mit Magie Eigenschaften :
ViewBag.Foo
, für die Sie keine Kompilierung Sicherheit.
ich weiterhin Microsoft schuld immer dieses Konzept in MVC eingeführt werden.
Der Name der Eigenschaften sind Groß- und Kleinschreibung.
Andere Tipps
Intern ViewBag Eigenschaften werden als Name / Wert-Paare in der gespeichert Viewdata Wörterbuch .
Hinweis: in den meist Pre-Release-Versionen von MVC 3 wurde die ViewBag Eigenschaft, um das Ansichtsmodell genannt, wie in diesem Ausschnitt aus MVC 3 Release Notes festgestellt:
(herausgegeben 10-8-12) Es wurde vorgeschlagen, ich die Quelle dieser Informationen poste ich geschrieben, hier ist die Quelle: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
MVC 2-Controller unterstützt eine Viewdata Eigenschaft, die Ihnen ermöglicht, Daten zu übergeben zu einer Ansicht Vorlage einer Late-Schranke mit Wörterbuch API. In MVC 3, können Sie auch verwenden etwas einfachere Syntax mit der ViewBag Eigenschaft zu erreichen, die gleichen Zweck. Zum Beispiel, statt Schreiben Viewdata [ "Message"] = "text", Sie können ViewBag.Message = "text" schreiben. Du nicht definieren müssen Klassen stark typisierte die verwenden ViewBag Eigenschaft. Denn es ist ein dynamische Eigenschaft, können Sie stattdessen einfach und festlegen Eigenschaften und es wird lösen sie dynamisch zur Laufzeit. Intern ViewBag Eigenschaften sind als Name / Wert-Paare in dem gespeicherte Viewdata-Wörterbuch. (Anmerkung: in den meisten Pre-Release-Versionen von 3 MVC, die ViewBag Eigenschaft genannt wurde die Viewmodel-Eigenschaft.)
ViewBag vs Viewdata in MVC
http://royalarun.blogspot.in/ 2013/08 / viewbag-Bildschirmtextsystem-TempData-and-view.html
Ähnlichkeiten zwischen ViewBag & Viewdata:
Hilft Daten zu erhalten, wenn Sie von Controller Ansicht bewegen. Gewöhnt an geben Daten vom Regler zum Ansicht entsprechend. Kurze Lebensdauer Mittel Wert wird null, wenn die Umleitung erfolgt. Dies liegt daran, ihr Ziel zu schaffen, ist es, einen Weg zwischen den Controllern und Ansichten zu kommunizieren. Es ist ein Kommunikationsmechanismus innerhalb des Servers Aufruf.
Der Unterschied zwischen ViewBag & Viewdata:
Viewdata ist ein Wörterbuch von Objekten, die abgeleitet ist von Viewdatadictionary Klasse und zugänglich mit Strings als Schlüssel. ViewBag ist eine dynamische Eigenschaft, die die Vorteile der neuen dynamischen Eigenschaften nimmt in C # 4.0. Viewdata erfordert eine Schublade gesteckt für komplexen Datentyp und Check für NULL-Werte zu vermeiden Fehler. ViewBag nicht erforderlich typecasting für komplexen Datentyp.
ViewBag & Viewdata Beispiel:
public ActionResult Index()
{
ViewBag.Name = "Arun Prakash";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Arun Prakash";
return View();
}
Der Aufruf in Ansicht
@ViewBag.Name
@ViewData["Name"]
ViewData
. Es erfordert Art Casting für komplexe Datentypen und prüft, ob NULL-Werte zu vermeiden Fehler
ViewBag
. Dabei spielt es keine Art Casting für komplexe Datentypen erfordert
Betrachten Sie das folgende Beispiel:
public class HomeController : Controller
{
public ActionResult Index()
{
var emp = new Employee
{
EmpID=101,
Name = "Deepak",
Salary = 35000,
Address = "Delhi"
};
ViewData["emp"] = emp;
ViewBag.Employee = emp;
return View();
}
}
Und der Code für View
ist wie folgt:
@model MyProject.Models.EmpModel;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Welcome to Home Page";
var viewDataEmployee = ViewData["emp"] as Employee; //need type casting
}
<h2>Welcome to Home Page</h2>
This Year Best Employee is!
<h4>@ViewBag.Employee.Name</h4>
<h3>@viewDataEmployee.Name</h3>
Alle Antworten legen nahe, dass ViewBag
und / oder ViewData
ist, Daten von Controller
zu Views
passieren, die Fehlinformation ist. beide sind sehr nützliche Daten von Ansichten zu Layout oder teilweise zu Ansichten zu übergeben (oder ViewComponents, usw.) Es ist nicht Controller aus.
als Standard asp.net Probe hat dies in der Layout-Seite:
<title>@ViewData["Title"] - MyApp</title>
und in einem beliebigen Ansicht
ViewData["Title"] = "Details";
Also, um die Frage zu stellen: „Was ist der Unterschied zwischen ViewBag
und ViewData
“
Der bemerkenswerteste Unterschied ist ViewData
eine stark typisierte Wörterbuch während ist
ViewBag
ist ein dynamischer Typ.
Beachten Sie, dass die Daten innerhalb von IST DAS GLEICHE
ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";
Wenn das eine oder andere benutzen?
-
ViewBag
nicht unterstützt nicht gültig C # Namen. Sie können nicht den ZugangViewData["Key With Space"]
mitViewBag
-
ViewBag.Something
dynamisch ist und Sie können Probleme haben, wenn Methoden aufrufen (wie Erweiterungsmethoden), die Bedürfnisse der genauen Parameter bei der Kompilierung kennen. -
ViewBag
für nulls syntaktische Reiniger überprüfen:ViewBag.Person?.Name
-
ViewData
haben alle die Eigenschaften eines Dictionary wieContainsKey
,Add
etc., so dass SieViewData.Add("somekey", "somevalue")
Keep in Mind verwenden könnte es Ausnahmen auslösen. - Verwenden
ViewData
auf Ansichten benötigt eine Schublade gesteckt, währendViewBag
dies nicht tun.
Das Wissen, die feinen Unterschiede, mit dem einen oder anderen ist viel mehr eine Geschmackspräferenz.
Normalerweise kann man sich vorstellen ViewBag.AnyKey
zu einem Alias ??von ViewData["AnyKey"]
Kann ich Ihnen empfehlen, auch nicht zu benutzen?
Wenn Sie auf „Senden“ Daten auf dem Bildschirm wollen, senden Sie eine stark typisierte Objekt (auch bekannt als Ansichtsmodell), weil es einfacher Test ist.
Wenn Sie binden an eine Art „Modell“ und haben zufällig „viewbag“ oder „Bildschirmtextsystem“ Artikel dann macht es das automatisierte Testen sehr schwierig.
Wenn Sie mit dieser überlegen, wie Sie in der Lage sein könnten, zu restrukturieren und nur Verwendung Viewmodel.
Es gibt einige feine Unterschiede, die meinen Sie Viewdata und ViewBag auf leicht unterschiedliche Weise aus der Sicht 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 und zeigt, dass Gießen kann unter Verwendung des ViewBag anstelle von Viewdata im Beispiel vermieden werden.
Bildschirmtextsystem: ein Wörterbuch zum Speichern von Daten zwischen View und Controller verwendet wird, u müssen die Ansicht Datenobjekt in dem entsprechenden Modell in der Ansicht werfen zu können, Daten von ihm abgerufen werden ...
ViewBag: ist eine dynamische Eigenschaft ähnlich in ihrem Arbeits der Ansichtsdaten, aber es ist besser, Cuz es nicht zu seinem corressponding Modell gegossen werden muss, bevor es in der Ansicht mit .. .
Im Folgenden ist der Punkt zu Punkt Differenz über Viewdata, ViewBag, TempData & Session. Kredit- / Kopiert askforprogram.in , Folgen Sie den Link für die Code-Beispiel, dass ich hier nicht erwähnt haben.
-
Viewdata in MVC
- Viewdata ist Eigentum der Controllerklasse.
- Viewdata ist eine Art von Dictionary-Objekt.
- Viewdata ist der Schlüssel-Wert-Wörterbuchsammlung.
- Viewdata wurde in MVC Version 1.0 eingeführt.
- Viewdata arbeitet mit .NET Framework 3.5 und höher.
- Need Typumwandlung von Code zu tun, während aufzählt.
- Viewdata-Objekt hält Daten nur für aktuelle Anforderung.
-
ViewBag in MVC
- ViewBag ist Eigentum der Controllerklasse.
- ViewBag ist eine Art dynamisches Objekt.
- ViewBag ist eine Art von Objekt.
- ViewBag wurde in MVC 3.0-Version eingeführt.
- ViewBag arbeitet mit .NET Framework 4.0 und höher.
- ViewBag verwendet Eigentum und Griffe es, so dass keine Notwendigkeit Typumwandlung zu tun, während Aufzählen.
- ViewBag Objekt hält Daten nur für aktuelle Anforderung.
-
TempData in MVC
- TempData ist Eigentum der Controllerklasse.
- TempData ist eine Art von Dictionary-Objekt.
- TempData ist der Schlüssel-Wert-Wörterbuchsammlung.
- TempData wurde in MVC Version 1.0 eingeführt.
- TempData arbeitet mit .NET Framework 3.5 und höher.
- Need Typumwandlung von Code zu tun, während aufzählt.
- TempData Objekt zwischen aktueller Anforderung und nachfolgender Anforderung auf Daten verwendet werden.
-
Session in MVC
- Session ist Eigentum des Controller (abstrakte Klasse).
- Session ist eine Art von Httpsessionstatebase.
- Session ist der Schlüssel-Wert-Wörterbuchsammlung.
- Session wurde in MVC Version 1.0 eingeführt.
- TempData arbeitet mit .NET Framework 1.0 und höher.
- Need Typumwandlung von Code zu tun, während aufzählt.
- Session-Objekt hält Daten für alle Anforderungen. Gültig für alle Anfragen, läuft nie.
Auch wenn Sie vielleicht nicht einen technischen Vorteil der Auswahl eines Formats haben über der andere, sollten Sie zwischen den beiden bewusst einige wichtige Unterschiede Syntaxen. Ein offensichtlicher Unterschied ist, dass ViewBag funktioniert nur, wenn der Schlüssel Sie zugreifen ist ein gültiger identifi er C #. Zum Beispiel, wenn Sie einen Wert in Viewdata legen [ "Key Mit Spaces "] können Sie diesen Wert nicht zugreifen ViewBag weil der Code wird nicht kompiliert. Ein weiterer entscheidender Aspekt zu berücksichtigen ist, dass Sie nicht in der dynamischen Werten als Parameter übergeben können zu Erweiterungsmethoden. Die C # Compiler müssen die reale Art von jedem wissen Parameter bei der Kompilierung, um die richtige Erweiterungsmethode zu wählen. Wenn ein Parameter dynamisch ist, wird Kompilierung fehlschlagen. Zum Beispiel wird dieser Code immer scheitern: @ Html.TextBox ( "name", ViewBag.Name). Arbeiten diese um, entweder Verwendung Viewdata [ "Name"] oder werfen die va
public ActionResult Index()
{
ViewBag.Name = "Monjurul Habib";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Monjurul Habib";
return View();
}
In View:
@ViewBag.Name
@ViewData["Name"]
Auf diese Weise können wir es verwenden, machen Sie die Werte der die Informationen zwischen dem Controller auf anderen Seite mit TEMP DATA
übergebenEin Hauptunterschied zwischen I und Viewdata ViewBag bemerkt ist:
Viewdata. Es wird Objekt zurückgeben spielt keine Rolle, was Sie in diesem und Bedarf zugewiesen haben wieder typisieren wieder auf den ursprünglichen Typ
ViewBag: es ist intelligent genug, um zurückzukehren genau geben, was du ihm zugeordneten spielt es keine Rolle Sie einfach Typ (d int, string etc.) oder komplexen Typ zugeordnet wetter
.Bsp.: Controller-Code
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
Products p1 = new Products();
p1.productId = 101;
p1.productName = "Phone";
Products p2 = new Products();
p2.productId = 102;
p2.productName = "laptop";
List<Products> products = new List<Products>();
products.Add(p1);
products.Add(p2);
ViewBag.Countries = products;
return View();
}
}
public class Products
{
public int productId { get; set; }
public string productName { get; set; }
}
}
Code anzeigen.
<ul>
@foreach (WebApplication1.Controllers.Products item in ViewBag.Countries)
{
<li>@item.productId @item.productName</li>
}
</ul>
Ausgabebildschirm.
Daten
- Bildschirmtextsystem wird verwendet, um Daten, um von Controller Ansicht
- Viewdata von der Viewdatadictionary Klasse abgeleitet ist und ist im Grunde ein Dictionary-Objekt i.e.Keys und Werte in dem Schlüssel String ist, während Werte Objekte sein werden.
- Daten typcasting erforderlich ist, während die Daten von Viewdata Abrufen wegen seines Objekttypen von Daten und auch null vValue Prüfung vor dem Gießen Art sonst wird es die Anwendung brechen. Wenn die Umleitung auftritt, dann wird sein Wert null Lesen Sie die vollständige Differenz zwischen TempData Viewdata und View-Tasche
http://www.gurujipoint.com /2017/09/view-data-viewbag-and-tempdata.html
- Bildschirmtextsystem verwendet wird, um Daten von der Steuerung über einen Blick passiert
- Sie von Viewdatadictionary Klasse abgeleitet ist
- Es ist nur für die aktuelle Anfrage
- Benötigt für komplexen Datentyp und prüft, ob Nullwerte zu vermeiden Fehler typecasting
- Wenn die Umleitung auftritt, dann wird sein Wert null
- ViewBag ist auch eine dynamische Eigenschaft für die Datenübertragung von der Steuerung an die jeweilige Ansicht
- ViewBag verwendet, die die Vorteile der neuen Dynamik nimmt in C verfügt # 4.0
- es ist auch für die aktuelle Anforderung nur verfügbar
- Wenn die Umleitung auftritt, dann werden ihr Wert wird null
- Does nicht für Typen komplexen Datentypecasting erfordert
Hier Viewdata ??strong> und ViewBag sind beide verwendeten Passdaten von Controller .
1. Viewdata ??strong>
-. Viewdata ist Wörterbuch-Objekt, das von abgeleitet ist ViewDataDictonary Klasse
-. Die Daten erlauben nur eine Anforderung, Werte Viewdata gelöscht werden, wenn Seite Umleiten auftritt
-. Viewdata Wert muss kat eingegeben werden vor der Verwendung
Beispiel: In-Controller
public ActionResult PassingDatatoViewWithViewData()
{
ViewData["Message"] = "This message shown in view with the ViewData";
return View();
}
Ansicht
@ViewData["Message"];
-. Mit Viewdata ist ein Paar wie Key und Wert , Mitteilung ist der Schlüssel und in Hochkomma Wert Wert
-. Daten sind einfach, so dass wir hier nicht verwenden können, wenn typecasting Daten-Komplex wird dann Typen Gießen mit
public ActionResult PassingDatatoViewWithViewData()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewData["types"] = type;
return View();
}
- In View-Daten können als
extrahiert werden<ul>
@foreach (var items in (List<string>)ViewData["types"])
{
<li>@items</li>
}
</ul>
2. ViewBag
-. ViewBag verwendet die dynamische feature.ViewBag Wrapper um die Viewdata ??p>
-. In ViewBag type casting erforderlich ist
-. Das gleiche wie Viewdata, wenn Umleitung Wert auftritt wird null
Beispiel:
public ActionResult PassingDatatoViewWithViewBag()
{
ViewData.Message = "This message shown in view with the ViewBag";
return View();
}
Ansicht
@ViewBag.vbMessage
- für komplexe Typen Verwendung ViewBag
public ActionResult PassingDatatoViewWithViewBag()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewBag.types = type;
return View();
}
- In View-Daten können als
extrahiert werden<ul>
@foreach (var items in ViewBag.types)
{
<li>@items</li>
}
</ul>
-. Der Hauptunterschied besteht darin, dass ViewBag nicht erforderlich Schublade gesteckt, aber Viewdata ??strong> ist erforderlich, typecasting
ViewBag und Viewdata sind zwei Mittel, die verwendet werden, um Informationen von der Steuereinheit passieren in ASP.Net MVC anzuzeigen. Das Ziel sowohl Mechanismus der Verwendung ist die communicaton zwischen Controller und Ansicht zur Verfügung zu stellen. Beide haben kurze Lebensdauer, dass der Wert der beiden Null wird, sobald die Umleitung dh aufgetreten, sobald die Seite von der Quellseite umgeleitet wurde auf die Zielseite, die beide ViewBag sowie Viewdata (wo wir den Wert von ViewBag oder Viewdata eingestellt) null wird.
Trotz dieser Ähnlichkeiten mit sowohl (ViewBag und Viewdata) sind zwei verschiedene Dinge, wenn wir über die Umsetzung der beiden sprechen. Die Unterschiede sind wie folgt:
1) Wenn wir beide Implementierung analysieren weise dann werden wir feststellen, dass Viewdata eine Wörterbuch Datenstruktur -. Wörterbuch der Objekte abgeleitet von Viewdatadictionary und zugänglich Strings als Schlüssel verwenden, um diese Werte während ViewBag Verwendung der dynamischen machen Funktionen in C eingeführt # 4.0 und ist eine dynamische Eigenschaft.
2). Während die Werte bilden Viewdata zugreifen, müssen wir die Werte (Datentypen typisieren), wie sie als Objekte im Viewdata-Wörterbuch gespeichert sind, aber es gibt keine solche Notwendigkeit, wenn wir ten Wert bei ViewBag zugreifen.
3) In ViewBag wir den Wert wie folgt gesetzt werden können.
ViewBag.Name = "Value";
und kann den Zugriff wie folgt:
@ViewBag.Name
Während bei Viewdata können die Werte eingestellt und abgerufen werden, wie folgt: Einstellen Viewdata wie folgt:
ViewData["Name"] = "Value";
und der Zugriff auf Wert wie diese
@ViewData["Name"]
Für weitere Informationen hier klicken: