当前位置: 首页 > 编程语言 > C#

从一个控制器调用方法到另一个控制器时,Session为null...MVC分享

时间:2023-04-10 23:18:15 C#

当从一个控制器调用方法到另一个控制器时,Session为null...MVC我有一个ASP.NETMVC应用程序,我添加了一个新控制器并从现有控制器调用这个新控制器的方法。我正在使用会话变量,在控制器A中我在控制器B中调用一个方法:if(Session["Grid"]!=null){}//这里的会话对象很好b.CallMethod();在新控制器中,我用这样的方法调用B:publicobjectCallMethod(){if(Session["Grid"]!=null)//sessionobjectisnull{//domything}}变量不是问题,它是会话对象。它根本不起作用,所以我的应用程序崩溃了。会话在控制器A中工作正常,那么为什么它在控制器B中为空?谢谢这是因为ControllerB需要初始化自身,并且作为此过程的一部分,它还相应地设置会话、请求、响应等。因此,您需要调用Initialize方法并将当前RequestContext传递给它。但是,因为它被标记为受保护的(因为它没有被直接调用,只使用了ControllerFactory),你必须公开它:然后在你的ControllerA中:varcontrollerB=newControllerB();controllerB.InitializeController(this.Request.RequestContext);或者,由于Sessiongetter实际上是this.ControllerContext.HttpContext.Session的简写(与Request、Response等相同),您可以设置ControllerContext:varcontrollerB=newControllerB();controllerB.ControllerContext=newControllerContext(this.Request.RequestContext,controllerB);请参见MSDN发生这种情况是因为Session是一个根据调用控制器的方式进行初始化的属性。您可以使用HttpContext.Session而不是Session。HttpContext是指当前的http请求。publicobjectCallMethod(){if(HttpContext.Session["Grid"]!=null)//sessionobjectisnull{//domything}}这可以通过“告诉,不要”的良好编码实践轻松解决ask",也就是你把想要的值传给方法,而不是期望它自己找:大家有用,需要多了解C#学习教程,希望大家多多关注——if(Session["网格"]!=null){varb=newControllerB();b.CallMethod(会话["网格"]);}...publicobjectCallMethod(stringgrid){//做你的事}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: