343 votes

Ce qui ' la différence entre ViewData et ViewBag ?

J’ai vu le dans MVC 3. Comment est-ce différent de dans MVC 2 ?

394voto

Darin Dimitrov Points 528142

Il utilise le C# 4.0 caractéristique dynamique. Il permet d'atteindre le même objectif que viewdata et devrait être évité en faveur de l'utilisation fortement typé modèles de vue (de la même manière que viewdata doit être évitée).

Donc, fondamentalement, il remplace les chaînes magiques:

ViewData["Foo"]

avec la magie des propriétés:

ViewBag.Foo

pour qui vous n'avez pas le temps de compilation de sécurité.

Je continue à blâmer Microsoft pour toujours l'introduction de ce concept dans MVC.

Le nom de l'propriétés sont sensibles à la casse.

42voto

DisplacedGuy Points 1679

En interne ViewBag propriétés sont stockées sous forme de paires nom/valeur dans le ViewData dictionnaire.

Remarque: dans la plupart des pré-versions de la MVC 3, le ViewBag propriété a été nommée le ViewModel comme indiqué dans cet extrait de MVC 3 notes de version:

(édité 10-8-12) Il a été suggéré que je poste la source de cette info que j'ai posté, voici la source: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4

MVC 2 contrôleurs de soutenir un ViewData bien que vous permet de passer des données pour un gabarit de vue à l'aide d'une liaison tardive dictionnaire de l'API. Dans MVC 3, vous pouvez également utiliser un peu plus simple syntaxe avec le ViewBag propriété pour accomplir la même but. Par exemple, au lieu de écrit ViewData["Message"]="texte", vous pouvez écrire ViewBag.Message="texte". Vous n'avez pas besoin de définir de fortement typées classes pour utiliser les ViewBag de la propriété. Parce que c'est un dynamique de la propriété, vous pouvez à la place obtenir ou définir les propriétés et il va résoudre dynamiquement au moment de l'exécution. En interne, ViewBag propriétés sont stockés comme des paires nom/valeur dans la ViewData dictionnaire. (Remarque: dans la plupart des les pré-versions de la MVC 3, le ViewBag propriété a été nommée l' ViewModel de la propriété.)

35voto

Arun Prakash Points 144

ViewBag vs ViewData en MVC

http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html

Les similitudes entre le ViewBag & ViewData :

Aide à conserver les données lorsque vous déplacez d'un contrôleur de vue. Utilisé pour transmettre des données de contrôleur à la vue correspondante. Court de la vie la valeur devient nulle lorsque la redirection se produit. C'est parce que leur but est de fournir un moyen de communiquer entre les contrôleurs et les vues. C'est un mécanisme de communication au sein du serveur d'appel.

Différence entre ViewBag & ViewData:

ViewData est un dictionnaire d'objets qui est dérivée à partir de ViewDataDictionary classe et accessibles à l'aide de chaînes de caractères comme des clés. ViewBag est une propriété dynamique qui tire parti de la nouvelle dynamique caractéristiques en C# 4.0. ViewData nécessite typecasting de type de données complexe et vérifier les valeurs null pour éviter l'erreur. ViewBag ne nécessite pas de typecasting de type de données complexe.

ViewBag & ViewData Exemple:

public ActionResult Index()

{
ViewBag.Name = "Arun Prakash";
retour Afficher();
}

public ActionResult Index()
{
ViewData["Nom"] = "Arun Prakash";
retour Afficher();
}

Appel en Vue
@ViewBag.Nom
@ViewData["Nom"]

31voto

Naresh Ravlani Points 459

ViewData : Il a fallu transtypage pour type de données complexe et rechercher les valeurs null éviter toute erreur.

ViewBag : Ce n’est pas un transtypage requis pour le type de données complexe.

Considérez l’exemple suivant :

et code de vue est comme suit :

11voto

Alan Macdonald Points 718

Il y a quelques différences subtiles qui signifient que vous pouvez utiliser ViewData et ViewBag légèrement différemment de la vue. Un des avantages sont décrit dans ce post http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx et montre que coulée peut être évitée dans l’exemple, en utilisant le ViewBag au lieu de ViewData.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X