J'utilise la AcceptVerbs
méthode détaillée dans l'article de blog Aperçu 5 de Scott Gu pour traiter les entrées de formulaire dans ASP.NET MVC:
- L'utilisateur reçoit un formulaire vide via GET
- L'utilisateur publie le formulaire rempli via POST à la même action
- L'action valide les données, prend les mesures appropriées et redirige vers une nouvelle vue
Donc je n'ai pas à utiliser TempData
. Cela dit, je dois maintenant ajouter une étape de «confirmation» à ce processus, et cela semble nécessiter l'utilisation de TempData
.
Pour une raison quelconque, j'ai une aversion pour l'utilisation TempData
- que c'est quelque chose qui doit être conçu.
Est-ce vraiment une préoccupation valable ou est-ce que je l'invente?
asp.net-mvc
tempdata
anonyme
la source
la source
Réponses:
Je pense en quelque sorte aux données temporaires comme étant un mécanisme à feu et à oublier pour avertir l'utilisateur. C'est génial de leur rappeler quelque chose qu'ils ont fait récemment, mais j'hésiterais également à en faire une étape obligatoire dans certains processus utilisateur. La raison étant que s'ils actualisent la page, je pense qu'elle disparaîtrait. Eh bien, je suppose que j'hésite aussi à l'utiliser car il n'est pas vraiment bien défini à quel point il est fiable.
Je me demande si le problème est que l'action est redirigée vers une autre page avant l'étape de confirmation. Je me demande si à la place, après leur première soumission, vous pourriez faire suffisamment de traitement pour générer la boîte de dialogue de confirmation, puis renvoyer la page d'origine avec la question de confirmation. Similaire à la façon dont vous pouvez effectuer la validation, sauf que la règle de validation vérifie si l'étape de confirmation a été effectuée (avec l'interface utilisateur de confirmation masquée jusqu'à ce que les autres validations réussissent).
la source
Pas besoin d'avoir une aversion pour TempData ... Mais s'il n'est pas utilisé correctement, cela pourrait sûrement être une indication d'une mauvaise conception. Si vous utilisez des URL RESTful, TempData est une meilleure pratique pour transférer les messages de vos actions POST vers vos actions GET. Considère ceci:
Vous avez un formulaire sur URL Products / New. Le formulaire Posts to Products / Create, qui valide le formulaire et crée le produit, en cas de succès, le contrôleur redirige vers l'URL Products / 1 et en cas d'erreur, il redirige vers les produits / Nouveau pour afficher les messages d'erreur.
Produits / 1 n'est que l'action GET standard pour le produit, mais nous aimerions qu'un message s'affiche indiquant que l'insertion a réussi. TempData est parfait pour cela. Ajoutez le message à TempData dans le contrôleur de poste et mettez-en une logique dans la vue et c'est fait.
En cas d'échec, j'ai ajouté les valeurs entrées dans formCollection et une collection de messages d'erreur à TempData dans la post-action, et je suis redirigé vers l'action initiale Prodcuts / New. J'ai ajouté une logique à la vue pour remplir les entrées du formulaire avec les valeurs précédemment entrées avec tous les messages d'erreur. Cela me semble beau et propre!
la source
Products/New
? Quelle valeurProducts/Create
ajoute-t-il?Je pense que vous feriez bien d'hésiter avant d'utiliser TempData. TempData est stocké dans la session et cela peut avoir des implications pour vous si:
Si votre site doit avoir une haute disponibilité, il existe des considérations supplémentaires concernant l'application de l'état de session, mais ce sont tous des problèmes résolus.
la source
J'ai une méthode GetModel qui vérifie d'abord TempData ["modèle"] et le renvoie. Sinon, GetModel charge les données appropriées à partir de la base de données.
Cela économise une charge supplémentaire de la base de données lorsque j'ai une action qui doit renvoyer une vue différente qui nécessite les mêmes données de modèle.
la source
Découvrez les contrôleurs sans session dans MVC3. Il s'est avéré que l'utilisation de session empêche l'exécution parallèle des demandes d'un seul utilisateur et conduit ainsi à une dégradation des performances.
Puisque tempdata utilise la session par défaut, vous ne pourrez pas utiliser cette fonctionnalité. Vous pouvez passer à l'utilisation de cookies pour les données temporaires, mais c'est un peu gênant (du moins pour moi). Encore plus propre que viewstate, alors peut-être que ce n'est pas un si gros problème.
la source
Pourquoi avez-vous une telle aversion? Cette chose est simplement faire son travail et le faire bien :)
Si vous ne l'aimez pas à cause de son caractère non fortement typé, vous pouvez toujours créer un wrapper qui vous fournira une interface fortement typée.
la source
C'est comme utiliser ViewData, ce qui signifie que ce n'est probablement pas un risque pour la sécurité. Mais je préfère utiliser ViewData que TempData. Vérifiez ici pour une comparaison: http://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/
En fonction de la conception, vous pouvez toujours stocker l'utilisateur / le panier ou ce dont vous avez besoin dans les données temporaires de la base de données et avoir juste un champ "IsReady" qui indique s'il est terminé ou non, ce qui le rend extensible pour plus tard si vous souhaitez prendre en charge l'esprit, que les gens peuvent fermer leur navigateur.
la source
Toutes les bonnes réponses, avez-vous jeté un coup d'œil à ceci pour faire passer des messages.
TempData et Session ne sont pas la meilleure idée pour les architectures RESTful car la plupart des sessions sont stockées en mémoire. Ainsi, lorsque vous souhaitez utiliser une batterie de serveurs, la session des utilisateurs existe sur un serveur tandis que leur demande suivante peut être envoyée à un autre serveur.
Cela étant dit, jetez un œil à cette utilisation de TempData pour passer des messages ici.
http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/
Mabye cela pourrait être adapté pour utiliser une approche de chaîne de requête si utilisé uniquement pour la redirection vers une autre page d'alertes.
la source