2009-09-15 9 views
3

En utilisant ASP.NET MVC lorsque j'essaie d'obtenir les informations stockées sur ma session ["objectName"] du constructeur, je vois que la session n'a pas encore été définie, mais une fois que le contrôleur a été construit, la session contient le droit information.Pourquoi mes variables de session ne sont pas disponibles lors de la construction d'un contrôleur?

public class ABCController : Controller 
{ 
    public ABCController() { var tmp = Session["Whatever"]; } //This line is null 
    //But I know it has information 

    public ActionResult Index() { var tmp = Session["Whatever"]; } //This works fine 
} 

Merci

+0

Où est défini Session ["Whatever"]? –

+0

Session ["Whatever"] est défini lors de la connexion à des éléments tels que userid et d'autres informations importantes pour cette session. – Geo

Répondre

8

La session se trouve dans le HttpContext. HttpContext est fourni au contrôleur dans le cadre du ControllerContext. Comme un ControllerContext n'est pas transmis en tant qu'argument au constructeur, il n'est disponible qu'après la création de la classe et l'attribution de ControllerContext. Il devrait être disponible, cependant, dans n'importe quelle méthode sur le contrôleur. Je ne sais pas comment vous pourriez vous attendre à ce que les propriétés d'une classe soient remplies avant que le constructeur de la classe soit appelé (sauf s'il s'agit de propriétés de classe statiques, mais ce n'est pas le cas ici).

13

Remplacer le Initialiser la méthode de la classe de base du contrôleur. Le contexte de requête est passé à cette méthode. Le contexte de la session fait partie du contexte de la requête.

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     var tmp = requestContext.HttpContext.Session["Whatever"]; 
    } 

Cette méthode est appelée après la création du contrôleur et avant l'appel de la méthode d'action.

Questions connexes