다른 모든 컨트롤러가 상속하는 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의 코드는?
를 참조하십시오? 나는 기본 컨트롤러를 통과하는 것이 가장 좋을 것이라고 생각했지만 세션 변수에 액세스해야합니다. – user1336495
@ user1336495 기본 컨트롤러는 레이아웃 페이지 데이터를 가져와야하는 곳이라고 생각합니다. "OnActionExecuting"메서드를 재정의하고 거기에서 가져올 수 있습니다. 그건 내가 레이아웃에서 ViewBag를 사용하는 것을 좋아하지 않는다고 말했다. 레이아웃에서 "@ Html.Action"을 호출하여 별도의 액션으로 데이터를 가져올 수 있습니다. – DMulligan