asp.net mvc在控制器构建期间的任何时候都可以使用Session吗?

时间:2010-03-11 14:12:43

标签: asp.net-mvc session

我试图在控制器和ControllerContext的构造函数中访问Session变量,它似乎总是为null。

最早的会话变量何时可用?

谢谢!

编辑:示例:

在一个控制器中:

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

调试时,controllercontext始终为null。在actionresult重定向到此控制器的控制器中,我有:

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 个答案:

答案 0 :(得分:11)

覆盖Initialize()

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    requestContext.HttpContext.Session["blabla"] = "hello"; // do your stuff
}

答案 1 :(得分:-2)

会话变量已在控制器的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
}

这应该在您的控制器中正常工作。

干杯