Frage

ich sah den ViewBag in MVC 3. Wie ist das anders als ViewData in MVC 2?

War es hilfreich?

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 Zugang ViewData["Key With Space"] mit ViewBag
  • 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 wie ContainsKey, Add etc., so dass Sie ViewData.Add("somekey", "somevalue") Keep in Mind verwenden könnte es Ausnahmen auslösen.
  • Verwenden ViewData auf Ansichten benötigt eine Schublade gesteckt, während ViewBag 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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

übergeben

Ein 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 &nbsp;&nbsp;&nbsp;@item.productName</li>
            }
        </ul>

Ausgabebildschirm.

Daten

  1. Bildschirmtextsystem wird verwendet, um Daten, um von Controller Ansicht
  2. 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.
  3. 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

Daten anzeigen
  1. Bildschirmtextsystem verwendet wird, um Daten von der Steuerung über einen Blick passiert
  2. Sie von Viewdatadictionary Klasse abgeleitet ist
  3. Es ist nur für die aktuelle Anfrage
  4. Benötigt für komplexen Datentyp und prüft, ob Nullwerte zu vermeiden Fehler typecasting
  5. Wenn die Umleitung auftritt, dann wird sein Wert null
ViewBag
  1. ViewBag ist auch eine dynamische Eigenschaft für die Datenübertragung von der Steuerung an die jeweilige Ansicht
  2. ViewBag verwendet, die die Vorteile der neuen Dynamik nimmt in C verfügt # 4.0
  3. es ist auch für die aktuelle Anforderung nur verfügbar
  4. Wenn die Umleitung auftritt, dann werden ihr Wert wird null
  5. Does nicht für Typen komplexen Datentypecasting erfordert

Hier Viewdata und ViewBag sind beide verwendeten Passdaten von Controller .

1. Viewdata

-. 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

-. 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 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:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top