Ich sah die ViewBag
in MVC 3. Was ist der Unterschied zu ViewData
in MVC 2?
Antworten
Zu viele Anzeigen?Ein wesentlicher Unterschied zwischen ViewData und ViewBag ist mir aufgefallen:
ViewData: es wird Objekt zurückgeben, egal was Sie in diese zugewiesen haben und müssen typecast wieder zurück auf den ursprünglichen Typ.
ViewBag: es ist genug intelligent, um genaue Art zurückgeben, was Sie zu ihm zugewiesen haben es spielt keine Rolle, ob Sie einfachen Typ (dh int, String etc.) oder komplexen Typ zugewiesen haben.
Beispiel: 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>
Bildschirm ausgeben.
AnsichtDaten
- ViewData wird verwendet, um Daten vom Controller an den View zu übergeben
- Sie ist abgeleitet von der ViewDataDictionary-Klasse
- Sie ist nur für die aktuelle Anfrage verfügbar
- Erfordert Typecasting für komplexe Datentypen und prüft auf Nullwerte, um Fehler zu vermeiden
- Wenn eine Umleitung erfolgt, wird ihr Wert zu Null.
ViewBag
- ViewBag wird auch verwendet, um Daten vom Controller an den jeweiligen View zu übergeben
- ViewBag ist eine dynamische Eigenschaft, die die Vorteile der neuen dynamischen Funktionen in C# 4.0 nutzt
- Sie ist auch nur für die aktuelle Anfrage verfügbar
- Wenn eine Umleitung erfolgt, wird ihr Wert zu Null.
- Erfordert kein Typecasting für komplexe Datentypen
Hier AnsichtDaten y ViewBag beide werden verwendet, um Daten von Controller a Siehe .
1. AnsichtDaten
-- ViewData ist ein Wörterbuchobjekt, das abgeleitet ist von ViewDataDictonary Klasse.
-- Daten erlauben nur eine Anfrage, ViewData-Werte werden gelöscht, wenn eine Seitenumleitung erfolgt.
-- Der Wert von ViewData muss vor der Verwendung kateingetippt werden.
Ejemplo: In Controller
public ActionResult PassingDatatoViewWithViewData()
{
ViewData["Message"] = "This message shown in view with the ViewData";
return View();
}
In Ansicht
@ViewData["Message"];
-- Mit ViewData ist ein Paar wie Schlüssel y Wert Nachricht ist der Schlüssel und der Wert in Anführungszeichen ist der Wert.
-- Daten sind einfach, so können wir nicht verwenden typecasting hier, wenn Daten komplex ist dann mit Typ Casting.
public ActionResult PassingDatatoViewWithViewData()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewData["types"] = type;
return View();
}
-- In View können Daten extrahiert werden als
<ul>
@foreach (var items in (List<string>)ViewData["types"])
{
<li>@items</li>
}
</ul>
2. ViewBag
--ViewBag verwendet den dynamischen Feature.ViewBag Wrapper um die ViewData.
-- In ViewBag ist ein Typ-Casting erforderlich.
-- Wie ViewData, bei Umleitung wird der Wert Null.
Ejemplo:
public ActionResult PassingDatatoViewWithViewBag()
{
ViewData.Message = "This message shown in view with the ViewBag";
return View();
}
In Ansicht
@ViewBag.vbMessage
--Für den Typ Complex verwenden Sie ViewBag
public ActionResult PassingDatatoViewWithViewBag()
{
var type= new List<string>
{
"MVC",
"MVP",
"MVVC"
};
ViewBag.types = type;
return View();
}
-- In View können Daten extrahiert werden als
<ul>
@foreach (var items in ViewBag.types)
{
<li>@items</li>
}
</ul>
-- der Hauptunterschied besteht darin, dass ViewBag keine Typisierung erforderlich, sondern AnsichtDaten ist das erforderliche Typecasting.