我试图在控制器和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实际设置在什么时候?我什么时候可以访问会话变量?
答案 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
}
这应该在您的控制器中正常工作。
干杯