Я создал ApplicationController.cs, который наследует все остальные контроллеры. Я пытаюсь использовать этот контроллер, чтобы захватить полное имя пользователя из БД, установить в ViewBag & захват в layout.cshtml.MVC3 - Получить информацию из базы данных и заполнить в layout.cshtml
Я также создал переменную сеанса в Global.asax, которая фиксирует логин пользователя. Моя проблема в том, что переменная Session имеет значение null в ApplicationController.cs. Однако переменная сеанса заполняется должным образом во всех дочерних контроллерах. Вот мой ApplicationController.cs код:
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, но заселена во всех детских контроллерах?
Есть ли у вас какие-либо рекомендации в отношении инъекционного информации данных на странице макета? Я думал, что пройти через базовый контроллер будет лучше, но мне нужно получить доступ к переменной сеанса. – user1336495
@ user1336495 Я думаю, что базовый контроллер должен отображать данные страницы макета. Вы можете переопределить метод OnActionExecuting и получить его там. Тем не менее, мне не нравится использовать ViewBag в макетах. Я бы назвал «@ Html.Action» в макете, чтобы вы могли получить отдельное действие для извлечения данных. – DMulligan