2013-08-14 2 views
4

В моей Global.asax, у меня есть этот код в session_start():Получить существующий сеанс в моем BaseController конструктор

UserIntranet user = new UserIntranet(); 
user.Login = this.Request.LogonUserIdentity.Name.Split('\\')[1]; 
Session["user"] = user as UserIntranet; 

В моей BaseController, у меня есть это свойство:

public UserIntranet UserIntranet 
{ 
    get 
    { 
     return Session["user"] as UserIntranet; 
    } 
} 

Он работает во всех контроллерах шахт, которые используют этот базовый контроллер, но не в моем основном конструкторе BaseController.

Эта сессия Null ...

Have попробовать это в моем BaseController:

public BaseController() 
{ 
    ViewBag.UserMenu = this.UserIntranet.Login;/* Null */ 
} 

Почему? Как я могу получить логин пользователя непосредственно в моем BaseController? Каков лучший способ?

ответ

18

Это нормально, все объекты HttpContext связанных объектов, таких как Session, еще не инициализированы в конструкторе контроллера ASP.NET MVC. Это происходит на более позднем этапе, в методе Initialize, который вы можете использовать:

public BaseController: Controller 
{ 
    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     ViewBag.UserMenu = this.UserIntranet.Login; 
    } 
} 
+0

Что это значит? Переопределить метод? Но как я могу получить эту существующую сессию? Можете ли вы привести мне пример? – Portekoi

+1

Несомненно, я обновил свой ответ на примере. Не пытайтесь использовать сеанс в конструкторе контроллера, вы должны переопределить метод «Initialize», и вы можете использовать сеанс там. –

+0

Ты мой герой :) Большое спасибо! – Portekoi