Tout organisme pourrait-il expliquer quand utiliser
- TempData
- ViewBag
- ViewData
J'ai une exigence, où je dois définir une valeur dans un contrôleur, que le contrôleur redirige vers le contrôleur deux et le contrôleur deux rendra la vue.
J'ai essayé d'utiliser ViewBag, la valeur est perdue au moment où j'atteins le contrôleur deux.
Puis-je savoir quand l'utiliser et quels sont ses avantages ou ses inconvénients?
Merci
asp.net-mvc-3
Hari Gillala
la source
la source
Réponses:
Vous permet de stocker des données qui survivront pour une redirection. En interne, il utilise la session comme magasin de sauvegarde, une fois la redirection effectuée, les données sont automatiquement supprimées. Le schéma est le suivant:
Vous permet de stocker des données dans une action de contrôleur qui sera utilisée dans la vue correspondante. Cela suppose que l'action renvoie une vue et ne redirige pas. Vit uniquement pendant la demande en cours.
Le schéma est le suivant:
et dans la vue:
ou avec ViewData:
et dans la vue:
ViewBag
est juste un wrapper dynamiqueViewData
et n'existe que dans ASP.NET MVC 3.Cela étant dit, aucune de ces deux constructions ne doit jamais être utilisée. Vous devez utiliser des modèles de vue et des vues fortement typées. Le modèle correct est donc le suivant:
Voir le modèle:
Action:
Vue fortement typée:
Après cette brève introduction, répondons à votre question:
et la vue correspondante (
~/Views/Two/Index.cshtml
):Il y a aussi des inconvénients à utiliser TempData: si l'utilisateur frappe F5 sur la page cible, les données seront perdues.
Personnellement, je n'utilise pas non plus TempData. C'est parce qu'en interne, il utilise Session et que je désactive la session dans mes applications. Je préfère un moyen plus reposant d'y parvenir. Ce qui est: dans la première action du contrôleur qui effectue le stockage de redirection, l'objet dans votre magasin de données et l'utilisateur l'ID unique généré lors de la redirection. Ensuite, sur l'action cible, utilisez cet identifiant pour récupérer l'objet initialement stocké:
La vue reste la même.
la source
ViewBag.Title
propriété sur toutes mes vues qui est utilisée dans mon_Layout.cshtml
fichier de vue de base. Un autre cas où je l'utilise est de donner des messages d'information (par exemple "Produit enregistré avec succès!") Aux utilisateurs. J'ai placé un balisage génériqueLayout.cshtml
pour rendre un message s'il est fourni et cela me permet de définirViewBag.Message
une action. L'utilisation d'une propriété ViewModel pour l'un ou l'autre cas présente trop d'inconvénients.ViewBag
. Veuillez décrire un scénario spécifique du monde réel, lorsque ViewBag a une certaine utilité. Puisque vous dites que c'est le cas, je cite une ressource puissante , je suppose que vous avez des cas spécifiques où cette ressource puissante est puissante . Comme je ne l'ai jamais utilisé dans ma carrière, je serais très heureux d'apprendre comment les gens utilisent cette arme puissante .ASP.NET MVC nous offre trois options ViewData, ViewBag et TempData pour transmettre les données du contrôleur à la vue et à la prochaine demande. ViewData et ViewBag sont presque similaires et TempData exerce une responsabilité supplémentaire. Permet de discuter ou d'obtenir des points clés sur ces trois objets:
Similitudes entre ViewBag et ViewData:
Différence entre ViewBag et ViewData:
Exemple ViewBag & ViewData:
En vue:
TempData:
TempData est également un dictionnaire dérivé de la classe TempDataDictionary et stocké dans une session de courte durée et c'est une clé chaîne et une valeur d'objet. La différence est que le cycle de vie de l'objet. TempData conserve les informations pendant la durée d'une requête HTTP. Cela ne signifie que d'une page à l'autre. Cela fonctionne également avec une redirection 302/303 car elle se trouve dans la même requête HTTP. Aide à conserver les données lorsque vous passez d'un contrôleur à un autre contrôleur ou d'une action à une autre. En d'autres termes, lorsque vous redirigez, «TempData» permet de conserver les données entre ces redirections. Il utilise en interne des variables de session. L'utilisation des données temporaires pendant la demande actuelle et suivante signifie uniquement qu'elles sont utilisées lorsque vous êtes sûr que la prochaine demande sera redirigée vers la vue suivante. Il nécessite une conversion de type pour les types de données complexes et vérifiez les valeurs nulles pour éviter les erreurs.
Le dernier mécanisme est la session qui fonctionne comme le ViewData, comme un dictionnaire qui prend une chaîne pour clé et un objet pour valeur. Celui-ci est stocké dans le cookie client et peut être utilisé beaucoup plus longtemps. Il faut également plus de vérification pour ne jamais avoir d'informations confidentielles. Concernant ViewData ou ViewBag, vous devez l'utiliser intelligemment pour les performances de l'application. Parce que chaque action passe par tout le cycle de vie d'une demande mvc asp.net régulière. Vous pouvez utiliser ViewData / ViewBag dans votre action enfant, mais veillez à ne pas l'utiliser pour remplir les données non liées qui peuvent polluer votre contrôleur.
la source
TempData
Fondamentalement, c'est comme un DataReader, une fois lu, les données seront perdues.
Regardez cette vidéo
Exemple
Si vous faites attention au code ci-dessus, RedirectToAction n'a aucun impact sur TempData jusqu'à ce que TempData soit lu. Ainsi, une fois TempData lu, les valeurs seront perdues.
Comment puis-je conserver le TempData après la lecture?
Vérifiez la sortie dans Action Method Test 1 et Test 2
Si vous faites attention au code ci-dessus, les données ne sont pas perdues après RedirectToAction ainsi qu'après la lecture des données et la raison en est que nous utilisons
TempData.Keep()
. est-ceDe cette façon, vous pouvez également le faire persister aussi longtemps que vous le souhaitez dans d'autres contrôleurs.
ViewBag / ViewData
Les données resteront dans la vue correspondante
la source
TempData dans Asp.Net MVC est l'une des fonctionnalités très utiles. Il est utilisé pour transmettre des données de la demande actuelle à la demande suivante. En d'autres termes, si nous voulons envoyer des données d'une page à une autre pendant que la redirection se produit, nous pouvons utiliser TempData, mais nous devons faire un peu de réflexion dans le code pour obtenir cette fonctionnalité dans MVC. Parce que la durée de vie de TempData est très courte et ne réside que jusqu'à ce que la vue cible soit entièrement chargée. Mais, nous pouvons utiliser la méthode Keep () pour conserver les données dans TempData.
Lire la suite
la source
ViewBag, ViewData, TempData et View State dans MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ASP.NET MVC nous offre trois options ViewData, VieBag et TempData pour transmettre les données du contrôleur à la vue et à la prochaine demande. ViewData et ViewBag sont presque similaires et TempData exerce une responsabilité supplémentaire.
Similitudes entre ViewBag et ViewData:
Différence entre ViewBag et ViewData:
Exemple ViewBag & ViewData:
Dans View, nous appelons comme ci-dessous:
TempData:
Le seul scénario où l'utilisation de TempData fonctionnera de manière fiable est lorsque vous redirigez. En effet, une redirection tue la demande actuelle (et envoie le code d'état HTTP 302 Objet déplacé au client), puis crée une nouvelle demande sur le serveur pour servir la vue redirigée.
Il nécessite une conversion de type pour les types de données complexes et vérifiez les valeurs nulles pour éviter les erreurs.
la source
la source
TempData sera toujours disponible jusqu'à la première lecture, une fois que vous l'avez lu, il n'est plus disponible. ViewBag Il est plus utile lorsque vous passez rapidement des données à la vue, normalement vous devez passer toutes les données à la vue via le modèle, mais il y a des cas où vous modélisez directement à partir d'une classe qui est mappée dans la base de données comme le cadre d'entité dans ce cas, vous ne pas quoi changer votre modèle pour passer un nouveau morceau de données, vous pouvez le coller dans le viewbag ViewData est juste une version indexée de ViewBag et a été utilisé avant MVC3
la source
La portée est également différente entre viewbag et temptdata. viewbag est basé sur la première vue (non partagé entre les méthodes d'action) mais les temptdata peuvent être partagées entre une méthode d'action et juste entre elles.
la source