2010-11-22 20 views

Répondre

2

Le but de SessionState est de conserver les données sur la session de l'utilisateur d'une requête Http à la suivante. Dans certains cas, il s'agit d'une solution plus simple que l'installation manuelle de cookies ou la création d'un magasin de données pour les informations de session et la transmission d'un identifiant. La façon de faire de MVC est d'utiliser TempData, ce qui enveloppe SessionState. Cela signifie qu'il n'est probablement pas nécessaire d'accéder directement à SessionState à moins que vous ne surchargiez une partie de l'infrastructure de base. Je pense à un modèle comme étant une représentation plus métaphorique des données. L'utilisation de données de session dans le modèle ne semble pas tout à fait correcte, car le modèle représente probablement une logique métier que SessionState compliquerait inutilement. System.Web.Mvc fournit beaucoup de mécanismes qui nous permettent de maintenir l'état sans avoir à utiliser directement le HttpContext. Ces mécanismes sont contenus en tant que propriétés du ControllerContext, des contextes de filtrage ActionFilter, ExceptionContext, AuthorizationContext, ModelBindingContext, RouteData et ViewContext. Ils aident à séparer le tas de choses différentes que l'on peut stocker dans une collection d'états de session dans des compartiments plus logiquement séparés. TempData est disponible depuis ControllerContext et ViewContext. Ceci est votre point d'accès à la fonctionnalité de l'état de la session. Si vous voulez contrôler la gestion et l'écriture de ces données, et que vous ne savez pas où, les filtres d'action sont un bon point d'injection, car ils évitent cette préoccupation de l'action principale du contrôleur orienté métier. Cet article explore l'utilisation d'un filtre ActionFilter qui conserve automatiquement l'état du modèle entre les demandes: http://blog.jorritsalverda.nl/2010/03/10/maintainable-mvc-post-redirect-get-pattern/. Je pense que cela peut être utile. La question n'était pas très précise ... Si je n'ai pas directement répondu à votre question, veuillez clarifier.

1

Je préfère les conserver au niveau du contrôleur ou les cacher dans les filtres d'action ou les classeurs personnalisés. L'état de session est vraiment un concept de client Web, je préfère les garder hors de mon modèle pour l'empilement de couches. Ou au moins, je l'emballerais dans ma propre interface de session ou de contexte.