Bou*_*ory 6 c# asp.net-mvc session
我有一个ASP.NET MVC应用程序,我添加了一个新的控制器,并从现有控制器调用这个新控制器的方法.我正在使用会话变量,在控制器A中我调用控制器B中的方法:
if (Session["Grid"] != null){}//session object is fine here
ControllerB b = new ControllerB ();
b.CallMethod();
Run Code Online (Sandbox Code Playgroud)
在我控制B的新控制器中,方法如下所示:
public object CallMethod(){
if (Session["Grid"] != null)//session object is null
{
//do my thing
}
}
Run Code Online (Sandbox Code Playgroud)
会话变量不是问题,它是会话对象.它完全无效,因此我的应用程序爆炸了.会话在控制器A中运行良好,那么为什么在控制器B中它为空?谢谢
hai*_*770 16
这是因为ControllerB需要对自身进行初始化,并作为这一过程的一部分,还设置Session,Request,Resposne相应等.
因此,您需要调用该Initialize()方法并将其传递给当前RequestContext.但是,因为它被标记为protected(因为它不是直接调用,只是使用ControllerFactory),所以你必须公开它:
public class ControllerB : Controller
{
public void InitializeController(RequestContext context)
{
base.Initialize(context);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的ControllerA:
var controllerB = new ControllerB();
controllerB.InitializeController(this.Request.RequestContext);
Run Code Online (Sandbox Code Playgroud)
另外,由于Session吸气剂实际上是一个简写this.ControllerContext.HttpContext.Session(同为Request,Response等等),你可以设置ControllerContext改为:
var controllerB = new ControllerB();
controllerB.ControllerContext = new ControllerContext(this.Request.RequestContext, controllerB);
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN
| 归档时间: |
|
| 查看次数: |
8831 次 |
| 最近记录: |