加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 当从一个控制器调用方法到另一个控制器时,Session为null

发布时间:2020-12-15 17:40:27 所属栏目:百科 来源:网络整理
导读:我有一个ASP.NET MVC应用程序,我添加了一个新的控制器,并从现有控制器调用这个新控制器的方法.我正在使用会话变量,在控制器A中我调用控制器B中的方法: if (Session["Grid"] != null){}//session object is fine here ControllerB b = new ControllerB ();b.
我有一个ASP.NET MVC应用程序,我添加了一个新的控制器,并从现有控制器调用这个新控制器的方法.我正在使用会话变量,在控制器A中我调用控制器B中的方法:
if (Session["Grid"] != null){}//session object is fine here
      ControllerB b  = new ControllerB ();
b.CallMethod();

在我控制B的新控制器中,方法如下所示:

public object CallMethod(){
    if (Session["Grid"] != null)//session object is null
        {
            //do my thing
        }
  }

会话变量不是问题,它是会话对象.它完全无效,因此我的应用程序爆炸了.会话在控制器A中运行良好,那么为什么在控制器B中它为空?谢谢

解决方法

这是因为ControllerB需要初始化自己,并且作为此过程的一部分,它还相应地设置Session,Request,Resposne等.

因此,您需要调用Initialize方法并将其传递给当前的RequestContext.但是,因为它被标记为受保护(因为它不是直接调用,只使用ControllerFactory),所以你必须公开它:

public class ControllerB : Controller
{
    public void InitializeController(RequestContext context)
    {
        base.Initialize(context);
    }
}

然后在你的ControllerA中:

var controllerB = new ControllerB();
controllerB.InitializeController(this.Request.RequestContext);

或者,由于Session getter实际上是this.ControllerContext.HttpContext.Session的简写(对于Request,Response等相同),您可以设置ControllerContext:

var controllerB = new ControllerB();
controllerB.ControllerContext = new ControllerContext(this.Request.RequestContext,controllerB);

见MSDN

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读