95 votes

ASP.NET MVC - TempData - bonne ou mauvaise pratique

Je suis à l'aide de l' AcceptVerbs méthode détaillée dans Scott Gu Aperçu de 5 blog pour traiter les entrées de formulaire en ASP.NET MVC:

  • L'utilisateur obtient une forme vide, par GET
  • Messages de l'utilisateur le formulaire rempli par la POSTE à la même Action
  • L'Action valide les données, prend les mesures appropriées, et redirige vers un nouveau point de vue

Donc je n'ai pas utiliser TempData. Cela dit, j'ai maintenant d'ajouter une "confirmation" de l'étape de ce processus, et il semble exiger l'utilisation d' TempData.

Pour certaines raisons, j'ai une aversion à l'aide d' TempData -- que c'est quelque chose à être conçu autour de.

Est-ce du tout une préoccupation valable, ou ai-je fait?

76voto

JasonD Points 906

Pas besoin d'avoir une aversion pour TempData... Mais si pas utilisé correctement, il peut certainement être une indication d'une mauvaise conception. Si vous utilisez Reposant URL, TempData est la meilleure pratique pour le transfert de messages à partir de votre POST Actions de vos Actions. Réfléchissez à ceci:

Vous disposez d'un formulaire à l'URL de Produits/Nouvelles. La forme de Postes de Produits/Créer, qui valide le formulaire et crée le Produit, Sur le Succès le Contrôleur redirige vers l'URL de Produits/1 et sur l'erreur serait de rediriger les requêtes vers des produits/Nouvel affichage de Messages d'Erreur.

Produits/1 est juste la norme OBTENEZ l'action pour le produit, mais nous aimerions un message à l'écran, indiquant l'insertion a été un succès. TempData est parfait pour cela. Ajouter le message à TempData dans le Poste de Contrôleur et de mettre quelques si la logique de la vue et votre fait.

En cas d'échec, j'ai été en ajoutant les valeurs saisies dans les formCollection et une collection de Messages d'erreur à TempData dans le Post d'Action, et de la rediriger vers le intial d'Action Produits/Nouvelles. J'ai ajouté de la logique à la vue de remplir les entrées d'un formulaire avec les valeurs précédemment entrées avec des messages d'erreur. Semble beau et propre à moi!

31voto

John Rayner Points 2709

Je pense que vous faites bien d'hésiter avant d'utiliser TempData. TempData est stocké dans la session et cela peut avoir des conséquences pour vous si:

  1. Vous n'avez pas des sessions d'utilisation de votre site dès maintenant
  2. Vous disposez d'un système à l'échelle à haut débit, par exemple si vous préférez éviter l'état de session au total
  3. Vous ne voulez pas utiliser des cookies (je ne sais pas comment bien MVC prend en charge cookieless sessions pour le moment)

Si votre site a besoin d'avoir de la haute disponibilité, puis il y a d'autres considérations autour de l'application de l'état de session, mais ce sont tous des problèmes solubles.

25voto

Frank Schwieterman Points 13519

Je pense que le temp de données comme un feu et oublier mécanisme pour informer l'utilisateur. Son grand pour leur donner un rappel de quelque chose, ils l'a fait récemment, mais je voudrais aussi être hésitante à faire une étape nécessaire dans certains processus utilisateur. La raison étant, s'ils actualiser la page, je crois qu'il serait parti. Eh bien, je suppose que je suis aussi hésité à l'utiliser comme sa pas vraiment bien défini de façon fiable, il est.

Je me demande si le problème que vous rencontrez l'action rediriger vers une autre page avant de la confirmer étape. Je me demande si au lieu de cela, après la première présentation, vous pourriez faire de traitement suffisante pour générer la boîte de dialogue de confirmation, puis retour à la page d'origine avec le confirmer question. Similaire à la façon dont vous pourriez faire de la validation, à l'exception de la règle de validation vérifie si l'étape de confirmation a été réalisée (avec la confirmation de l'INTERFACE utilisateur caché jusqu'à ce que d'autres de validation de passe).

3voto

Todd Smith Points 8297

J’ai une méthode GetModel qui d’abord vérifie les TempData [« modèle »] et le renvoie. Dans le cas contraire GetModel charge les données appropriées de la base de données.

Cela évite une charge supplémentaire de la base de données quand j’ai une action qui doit retourner une opinion différente qui nécessite les mêmes données de modèle.

3voto

aaimnr Points 1095

Découvrez sessionless contrôleurs dans MVC3. Il s'est avéré que l'utilisation d'session empêche l'exécution en parallèle d'une seule demandes de l'utilisateur, et conduit donc à une dégradation des performances.

Depuis tempdata utilise de session par défaut, vous ne pourrez pas utiliser cette fonction. Vous pouvez passer à l'utilisation de cookies pour tempdata, mais c'est un peu maladroit (au moins pour moi). Encore plus propre que le viewstate, bien que, peut-être que c'est pas un gros dealbreaker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X