2013-08-14 3 views
4

를 기존 세션을 가져 오기, 내가 이것을으로 session_start() 코드가 있습니다내 Global.asax에 내 BaseController 생성자에서

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

: 내 BaseController에서

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

을,이 속성이 이베이스 컨트롤러를 사용하는 모든 광산 컨트롤러에서 작동하지만 내 BaseController 생성자에서는 작동하지 않습니다. 이 세션은 널 (null)입니다

...

유무 내 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

예, 답을 예를 들어 업데이트했습니다. 컨트롤러의 생성자에서 Session을 사용하지 말고,'Initialize' 메소드를 오버라이드해야하고 거기에서 세션을 사용할 수 있습니다. –

+0

당신은 내 영웅입니다 :) 고마워요! – Portekoi

관련 문제