Comment fonctionne le MVC ASP.NET ViewBag
? MSDN dit que c'est juste un Object
, ce qui m'intrigue, comment les propriétés «magiques» telles que ViewBag.Foo
les cordes magiques ViewBag["Hello"]
fonctionnent-elles réellement?
En outre, comment puis-je en créer un et l'utiliser dans mon application ASP.NET WebForms?
Des exemples seraient vraiment appréciés!
asp.net
asp.net-mvc
viewbag
Aniket Inge
la source
la source
Réponses:
ViewBag
est de typedynamic
mais est en interne unSystem.Dynamic.ExpandoObject()
Il est déclaré comme ceci:
dynamic ViewBag = new System.Dynamic.ExpandoObject();
c'est pourquoi vous pouvez faire:
ViewBag.Foo = "Bar";
Un exemple de code d'objet Expander:
la source
public object ViewBag { get; }
sur la page MSDN pour ViewBag , mais j'achète votre affirmation selon laquelle c'est unExpandoObject
fichier . J'aime la comparaison avec ViewData ici : " Donc, fondamentalement, [ViewBag] remplace les chaînes magiques [dans ViewData] ... par des propriétés magiques ". ; ^)public object ViewBag { get; }
sur MSDN, Code dit que c'estdynamic ViewBag { get ..
qui en interne est de type DynamicViewDataC'est un objet dynamique, ce qui signifie que vous pouvez lui ajouter des propriétés dans le contrôleur et les lire plus tard dans la vue, car vous créez essentiellement l'objet comme vous le faites, une fonctionnalité de type dynamique. Voir cet article MSDN sur la dynamique. Consultez cet article sur son utilisation par rapport à MVC.
Si vous souhaitez l'utiliser pour les formulaires Web, ajoutez une propriété dynamique à une classe de page de base comme ceci:
Faites en sorte que toutes vos pages en héritent. Vous devriez pouvoir, dans votre balisage ASP.NET, faire:
Cela devrait fonctionner. Sinon, il existe des moyens de contourner ce problème.
la source
Le
ViewBag
est unSystem.Dynamic.ExpandoObject
comme suggéré. Les propriétés dans leViewBag
sont essentiellement desKeyValue
paires, où vous accédez à la valeur par la clé. En ce sens, ils sont équivalents:la source
ViewBag est utilisé pour transmettre les données de l'Action du contrôleur à la vue afin de rendre les données transmises. Vous pouvez désormais transmettre des données à l'aide de Controller Action et View en utilisant ViewBag ou ViewData. ViewBag: C'est un type d'objet dynamique, cela signifie que vous pouvez ajouter de nouveaux champs à viewbag dynamiquement et accéder à ces champs dans la vue. Vous devez initialiser l'objet de viewbag au moment de la création de nouveaux champs.
par exemple: 1. Création de ViewBag: ViewBag.FirstName = "John";
la source
ViewBag est de type dynamique. De plus, vous ne pouvez pas faire
ViewBag["Foo"]
. Vous obtiendrez une exception - Impossible d'appliquer l'indexation avec [] à une expression de type «System.Dynamic.DynamicObject» .Implémentation interne de
ViewBag
stocke réellement Foo dansViewData["Foo"]
(type de ViewDataDictionary), donc ces 2 sont interchangeables.ViewData["Foo"]
etViewBag.Foo
.Et la portée. ViewBag et ViewData sont destinés à transmettre les données entre les actions du contrôleur et la vue qu'il rend.
la source
ViewBag est un type dynamique qui vous permet de définir ou d'obtenir des valeurs de manière dynamique et vous permet d'ajouter un nombre quelconque de champs supplémentaires sans classe fortement typée.Ils vous permettent de transmettre des données d'un contrôleur à l'autre. Dans le contrôleur ......
En vue
Ce que j'ai appris, c'est que les deux devraient avoir la propriété save dynamic name, c'est-à-dire ViewBag.victor
la source
la source