J'ai vu ViewBag
dans MVC 3. En quoi est-ce différent de ViewData
MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
user469652
la source
la source
Les propriétés ViewBag sont stockées en interne sous forme de paires nom / valeur dans le dictionnaire ViewData .
Remarque: dans la plupart des versions préliminaires de MVC 3, la propriété ViewBag a été nommée ViewModel, comme indiqué dans cet extrait de notes de version de MVC 3:
(édité le 10-8-12) Il a été suggéré de publier la source de cette information que j'ai publiée, voici la source: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
la source
ViewData
etViewBag
pasViewModel
.dynamic
et soutientViewBag.Message
. On utilise l'ancienneViewData["Message"]
syntaxe.ViewBag vs ViewData dans MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Similitudes entre ViewBag et ViewData:
Différence entre ViewBag et ViewData:
Exemple ViewBag & ViewData:
Appel en vue
la source
typecasting
mais vous n'avez pas montré comment le typage est effectuéViewData
: Il nécessite une conversion de type pour les types de données complexes et vérifie les valeurs nulles pour éviter les erreurs.ViewBag
: Il ne nécessite pas de conversion de type pour les types de données complexes.Prenons l'exemple suivant:
Et le code pour
View
est le suivant:la source
<h4>@ViewBag.emp.Name</h4>
devrait changer<h4>@ViewBag.Employee.Name</h4>
Toutes les réponses suggèrent que
ViewBag
et / ouViewData
consiste à transmettre des données deController
àViews
ce qui est la désinformation. les deux sont très utiles pour transmettre des données de vues à la mise en page ou partielles aux vues (ou ViewComponents, etc.) Ce n'est pas exclusif au contrôleur.comme l'exemple asp.net par défaut ont ceci dans la page de mise en page:
et en tout point de vue
Alors, pour poser la question: "quelle est la différence entre
ViewBag
etViewData
?"La différence la plus notable
ViewData
est un dictionnaire fortement typéViewBag
c'est un type dynamique.Notez que les données à l'intérieur SONT LES MÊMES
Quand utiliser l'un ou l'autre?
ViewBag
ne prend pas en charge les noms C # non valides. vous ne pouvez pas accéderViewData["Key With Space"]
avecViewBag
ViewBag.Something
est dynamique et vous pouvez rencontrer des problèmes lors de l'appel de méthodes (comme les méthodes d'extension) qui doivent connaître le paramètre exact au moment de la compilation.ViewBag
peut vérifier le nettoyeur syntaxique nulls:ViewBag.Person?.Name
ViewData
avoir toutes les propriétés d'un dictionnaire commeContainsKey
,Add
etc., donc vous pouvez utiliserViewData.Add("somekey", "somevalue")
garder à l'esprit qu'il peut lever des exceptions.ViewData
sur les vues a besoin de TypeCasting alorsViewBag
que non.Connaître les différences subtiles, utiliser l'un ou l'autre est beaucoup plus une préférence gustative.
Normalement, vous pouvez penser
ViewBag.AnyKey
à un alias deViewData["AnyKey"]
la source
Puis-je vous recommander de ne pas utiliser non plus?
Si vous souhaitez «envoyer» des données à votre écran, envoyez un objet fortement typé (AKA ViewModel) car il est plus facile à tester.
Si vous vous liez à une sorte de "modèle" et avez des éléments aléatoires "viewbag" ou "viewdata", cela rend les tests automatisés très difficiles.
Si vous les utilisez, réfléchissez à la manière dont vous pourriez être en mesure de restructurer et utilisez simplement ViewModels.
la source
Il existe quelques différences subtiles qui signifient que vous pouvez utiliser ViewData et ViewBag de manières légèrement différentes de la vue. Un avantage est décrit dans cet article http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx et montre que le casting peut être évité dans l'exemple en utilisant le ViewBag au lieu de ViewData.
la source
viewdata: est un dictionnaire utilisé pour stocker des données entre View et le contrôleur, vous devez convertir l' objet de données de vue en son modèle correspondant dans la vue pour pouvoir en extraire des données ...
ViewBag: est une propriété dynamique similaire dans son fonctionnement aux données de la vue, mais il vaut mieux qu'il ne soit pas nécessaire de le convertir en son modèle correspondant avant de l'utiliser dans la vue ...
la source
Voici la différence point à point sur ViewData, ViewBag, TempData et Session. Crédit / copié askforprogram.in , suivez le lien pour l'exemple de code que je n'ai pas mentionné ici.
ViewData dans MVC
ViewBag dans MVC
TempData dans MVC
Session dans MVC
la source
Bien que vous ne puissiez pas avoir un avantage technique à choisir un format plutôt qu'un autre, vous devez être conscient de certaines différences importantes entre les deux syntaxes. Une différence évidente est que ViewBag ne fonctionne que lorsque la clé à laquelle vous accédez est un identifiant C # valide. Par exemple, si vous placez une valeur dans ViewData ["Key With Spaces"], vous ne pouvez pas accéder à cette valeur à l'aide de ViewBag car le code ne se compile pas. Un autre problème clé à considérer est que vous ne pouvez pas transmettre de valeurs dynamiques en tant que paramètres aux méthodes d'extension. Le compilateur C # doit connaître le type réel de chaque paramètre au moment de la compilation afin de choisir la méthode d'extension correcte. Si un paramètre est dynamique, la compilation échouera. Par exemple, ce code échouera toujours: @ Html.TextBox ("nom", ViewBag.Name). Pour contourner ce problème, utilisez soit ViewData ["Nom"
la source
la source
De cette façon, nous pouvons lui faire utiliser les valeurs pour passer les informations entre le contrôleur à une autre page avec TEMP DATA
la source
Une différence principale que j'ai remarquée entre ViewData et ViewBag est:
ViewData: il renverra l'objet, peu importe ce que vous lui avez attribué et vous devez retaper le type d'origine.
ViewBag: il est assez intelligent pour renvoyer le type exact ce que vous lui avez attribué peu importe la météo à laquelle vous avez attribué un type simple (c.-à-d. Int, chaîne, etc.) ou un type complexe.
Ex: code du contrôleur.
Afficher le code.
Écran OutPut.
la source
Afficher les données
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
la source
- ViewData est utilisé pour transmettre les données du contrôleur à afficher
- Il est dérivé de la classe ViewDataDictionary
- Il est disponible uniquement pour la demande en cours
- Nécessite une conversion de type pour les types de données complexes et vérifie les valeurs nulles pour éviter les erreurs
- Si la redirection se produit, sa valeur devient nulle
ViewBagla source
Ici, ViewData et ViewBag sont tous deux utilisés pour transmettre des données du contrôleur à la vue .
1. ViewData
- ViewData est un objet dictionnaire dérivé de la classe ViewDataDictonary .
- Les données ne permettent qu'une seule demande, les valeurs ViewData sont effacées lors de la redirection de page.
- La valeur ViewData doit être tapée cate avant utilisation.
Exemple: dans le contrôleur
En vue
- Avec ViewData est une paire comme Clé et Valeur , Message est Clé et en virgule inversée est Valeur.
- Les données sont simples, nous ne pouvons donc pas utiliser la conversion de type ici si les données sont complexes, alors utiliser la conversion de type.
- Les données In View peuvent être extraites
2. ViewBag
--ViewBag utilise la fonctionnalité dynamique.Enveloppe ViewBag autour de ViewData.
- Dans le type de ViewBag, la conversion est requise.
- Identique à ViewData, si la redirection se produit, la valeur devient nulle.
Exemple:
En vue
--Pour le type complexe, utilisez ViewBag
- Les données In View peuvent être extraites
- la principale différence est que ViewBag ne nécessite pas de transtypage mais ViewData est un transtypage requis.
la source
ViewBag et ViewData sont deux moyens utilisés pour transmettre des informations du contrôleur à afficher dans ASP.Net MVC. Le but d'utiliser les deux mécanismes est de fournir la communication entre le contrôleur et View. Les deux ont une durée de vie courte, la valeur des deux devient nulle une fois la redirection effectuée, c'est-à-dire une fois que la page a été redirigée de la page source (où nous définissons la valeur de ViewBag ou ViewData) vers la page cible, ViewBag et ViewData devient nul.
Malgré ces similitudes, les deux (ViewBag et ViewData) sont deux choses différentes si nous parlons de la mise en œuvre des deux. Les différences sont les suivantes:
1.) Si nous analysons les deux implémentations, nous constaterons que ViewData est une structure de données de dictionnaire - Dictionary of Objects dérivé de ViewDataDictionary et accessible à l'aide de chaînes comme clés de ces valeurs tandis que ViewBag utilise les fonctionnalités dynamiques introduites dans C # 4.0 et est une propriété dynamique.
2.) Lors de l'accès au formulaire de valeurs ViewData, nous devons transtyper les valeurs (types de données) car elles sont stockées en tant qu'objets dans le dictionnaire ViewData, mais cela n'est pas nécessaire si nous accédons à la valeur en cas de ViewBag.
3.) Dans ViewBag, nous pouvons définir la valeur comme ceci:
et peut accéder comme suit:
Dans le cas de ViewData, les valeurs peuvent être définies et accessibles comme suit: Définition de ViewData comme suit:
et accéder à une valeur comme celle-ci
Pour plus de détails, cliquez ici:
la source