ViewBag/ViewData Cycle De Vie
J'ai vu de nombreux posts sur l'utilisation de ViewBag/ViewData vs ViewModel mais je n'ai pas été en mesure de trouver une explication du cycle de vie de la ViewBag.
Par exemple, j'ai deux méthodes d'Action dans un Contrôleur:
//POST: /MyModel/Edit/5
[HttpPost]
public ActionResult Edit(MyModel _mymodel){}
et
//GET: /MyModel/Edit/5
public ActionResult Edit(int id){}
Si j'ai mis quelques valeurs dans le ViewBag dans la méthode d'action, mettre en place une certaine Forme d'étiquettes, puis quand ils utilisateur clique sur le bouton "Soumettre" et le Formulaire est posté sur le serveur via HTTP POST, le ViewBag valeurs ne sont plus dans le POST de la méthode d'action.
Quelqu'un peut-il expliquer (ou de référence à bon article) le cycle de vie de la ViewBag/ViewData ?
Vous devez vous connecter pour publier un commentaire.
Les données que vous mettez dans le ViewBag/ViewData est disponible uniquement pendant le cycle de vie de la demande au sein de laquelle vous l'ont peuplée. MVC ne pas avoir de poste le dos. Si vous avez besoin de quelque chose de persister plus d'une seule demande, vous devez utiliser la Session.
Ici est un bon article sur les différences entre les ViewData, ViewBag, et TempData: http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications
La accepté de répondre ici n'a pas vraiment décrire le cycle de vie de ViewBag/ViewData. Il est malheureux, il ne semble pas claire de la documentation à ce sujet. Cependant, sur cette base:
http://blogs.msdn.com/b/varunm/archive/2013/10/03/understanding-of-mvc-page-life-cycle.aspx
Il semblerait que le cycle de vie est:
IIS request -> Routage -> MVC Gestionnaire -> Contrôleur (avec ViewData) -> View (avec ViewData) -> Élimination
Donc, le ViewData (qui ViewBag simplement roulés) serait effectivement être instancié avec la ControllerContext, dans le même temps TempData est instancié. Cela se produit en quelques étapes après l'Étape 4: MVC Gestionnaire d'exécution.
Il y a une étape intéressante plus tard, où "Si la Page a ViewData, le ViewData est mis" au cours de la procédure de transfert du Contrôleur à la Vue. ViewData est évidemment disponible avant cela, donc peut pas dire que l'instancier. Il semble plutôt dire qu'il est transféré à partir du Contrôleur (se rappeler n'est pas disponible à Vue) à la ViewContext (le conteneur qui offre le point de Vue de l'accès à ViewBag/ViewData, et le Modèle).
La ViewData est probablement éliminés en même temps que le reste de la Vue.
Il est également important de noter que MVC Vues sont rendues à partir de l'intérieur vers l'extérieur, de sorte que le point de Vue particulier et de tous les devoirs qu'elle apporte à la ViewBag se fera de même dans l'ordre de l'intérieur vers l'extérieur. Cela signifie que quelque chose ensemble sur une Vue de l'enfant page sera disponible pour une Mise en page, mais en ajoutant quelque chose à un ViewBag dans une Mise en page, puis la lecture en Vue de l'enfant page échoue.
De MSDN - ViewBag: Le point de vue dynamique du dictionnaire de données, ViewData: Le dictionnaire pour la vue de données.
Donc ces/c'est un dictionnaire pour une vue donnée. Vous définissez ses valeurs dans votre action et vous utiliser dans votre vue. Que Zach a dit qu'il n'est pas de revenir à la suite de la demande. Vous pouvez envoyer ses valeurs de retour à toute action donnée comme un champ de formulaire, dans la chaîne de recherche, etc, mais ces valeurs ne sera pas automatiquement disponibles en tant que VieBag propriétés.
ViewBag
etViewData
sont utilisés pour les mêmes fins. Ils sont utilisés pour transmettre les données de contrôleurs de la Vue. Lorsque nous attribuons toutes les données ou de s'opposer à eux, ils sont accessibles dans la Vue.ViewData
:ViewData
est un dictionnaire d'objets et ils sontaccessible par la chaîne de caractères en tant que clé.
ViewBag
: Utilise la caractéristique dynamique. Il permet à un objet à ajouterdynamique propriétés.