asp.net mvc Сессия доступна в любой момент во время создания контроллера? - PullRequest
4 голосов
/ 11 марта 2010

Я пытаюсь получить доступ к переменным Session в конструкторе контроллера и ControllerContext, кажется, всегда пустым.

Когда доступны самые ранние переменные сеанса?

спасибо!

Редактировать: Пример:

в одном контроллере:

public HomeController()
    {
        MyClass test =   (MyClass)ControllerContext.HttpContext.Session["SessionClass"];
    //ControllerContext always null           
    }

при отладке controllercontext ВСЕГДА имеет значение null. В контроллере, чей результат действия перенаправляет на этот контроллер, у меня есть:

Session["SessionClass"] = class;

MyClass test = (MyClass )ControllerContext.HttpContext.Session["SessionClass"]; 
// this works fine! i can get varibale from session

return RedirectToAction("Index", "Home");

Итак, в какой момент фактически установлен ControllerContext? Когда я могу получить доступ к переменным сеанса?

Ответы [ 2 ]

11 голосов
/ 11 марта 2010

Переопределить Initialize () :

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext.Session["blabla"] = "hello"; // do your stuff
}
0 голосов
/ 11 марта 2010

Переменные сеанса уже доступны в constructor call вашего контроллера.

Но эти Sesison[] переменные не находятся в свободном доступе anywhere в вашем классе контроллера.


-> Вам нужно вызывать их либо в конструкторе, либо в методе вашего контроллера.

Кроме того, эти переменные должны быть где-то установлены, иначе их значения останутся null.

В соответствии с вашим примером вам нужно установить ключ Session["SessionClass"] где-нибудь перед вызовом его в конструкторе:

public ActionResult Details()
{
  Session["SessionClass"] = new MyClass() { // Set your class properties };

  return View((MyClass)Session["SessionClass"]);
}

Теперь мы распаковываем сохраненное значение из сеанса:

public HomeController()
{
  MyClass test = (MyClass)Session["SessionClass"];

  // Do stuff with `test` now
}

Это должно нормально работать в вашем контроллере.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...