2012-04-16 3 views
1

다른 모든 컨트롤러가 상속하는 ApplicationController.cs를 만들었습니다. 이 컨트롤러를 사용하여 DB에서 사용자의 전체 이름을 캡처하려고하는데, layout.cshtml에서 ViewBag & 캡처로 설정합니다.MVC3 - layout.cshtml의 DB에서 정보 얻기 및 채우기

나는 또한 사용자 로그인을 캡처하는 Global.asax에서 세션 변수를 만들었습니다. 내 문제는 Session 변수가 ApplicationController.cs에서 null이라는 것입니다. 그러나 세션 변수는 모든 하위 컨트롤러에서 올바르게 채워집니다.

public abstract class ApplicationController : Controller 
{ 
    private SkadPROEntities db = new SkadPROEntities(); 

    public SkadPROEntities SkadProDB 
    { 
     get { return db; }     
    } 


    public ApplicationController() 
    { 
     //string[] currentUserString = User.Identity.Name.Split('\\'); 
     //string myCurrentUser = currentUserString[1]; 
     //string myCurrentUser = Session["currentUser"].ToString(); 
     var empQuery = from employee in db.PRO_LSN_EMPLOYEE_OBJ 
         //where employee.LSN_Security_Nbr == Session["currentUser"].ToString() 
         where employee.LSN_Security_Nbr == "bhopkins" 
         select employee; 
     string firstName = ""; 
     foreach (var myEmployee in empQuery) 
     { 
      firstName = myEmployee.LSN_cf_First_Name; 
     } 
     ViewBag.FirstName = firstName; 
     ViewBag.EmpName = "Bill Test"; 
    } 
} 

왜 세션 변수 ApplicationController.cs에 널 (null),하지만 모든 아이들 컨트롤러에 채워집니다 여기 내 ApplicationController.cs의 코드는?

답변

1

생성자에서 세션 변수에 액세스 할 수 없습니다. 아마도 생성자가 아닌 자식 생성자의 작업 내에서 세션 변수에 액세스하려고했을 것입니다.

는 레이아웃 페이지에 데이터 정보를 주입 측면에서 어떤 권고가 있습니까 Session null in ASP.Net MVC Controller Constructors

+0

를 참조하십시오? 나는 기본 컨트롤러를 통과하는 것이 가장 좋을 것이라고 생각했지만 세션 변수에 액세스해야합니다. – user1336495

+0

@ user1336495 기본 컨트롤러는 레이아웃 페이지 데이터를 가져와야하는 곳이라고 생각합니다. "OnActionExecuting"메서드를 재정의하고 거기에서 가져올 수 있습니다. 그건 내가 레이아웃에서 ViewBag를 사용하는 것을 좋아하지 않는다고 말했다. 레이아웃에서 "@ Html.Action"을 호출하여 별도의 액션으로 데이터를 가져올 수 있습니다. – DMulligan