C# 从另一个类在ASP.Net MVC控制器中设置会话
我正在尝试从另一个控制器访问我的MVC HomeController的方法,以便在用户未经身份验证时将其重定向到主页。问题是,如果我自己实例化了HomeController中的会话,它就不会被设置,但我必须从HomeController访问存储在会话中的变量。我试图通过以下方式解决问题:C# 从另一个类在ASP.Net MVC控制器中设置会话,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在尝试从另一个控制器访问我的MVC HomeController的方法,以便在用户未经身份验证时将其重定向到主页。问题是,如果我自己实例化了HomeController中的会话,它就不会被设置,但我必须从HomeController访问存储在会话中的变量。我试图通过以下方式解决问题: HomeController currentHomeController = new HomeController(); currentHomeController.Session = this.Session
HomeController currentHomeController = new HomeController();
currentHomeController.Session = this.Session;
return currentHomeController.Index();
但是Session变量没有setter,因此这不起作用。有没有其他方法可以做到这一点
我的解决方案
这项工作:
return RedirectToAction("Index", "Home");
谢谢你的回答 您可以通过
Http.Context.Current
在您的其他班级:
var myVar = HttpContext.Current.Session["MyVar"]
如果您需要重定向到另一个操作,只需在您的帐户中执行RedirectToAction
return RedirectToAction("MyAction", "MyController")
您可以通过
Http.Context.Current
在您的其他班级:
var myVar = HttpContext.Current.Session["MyVar"]
如果您需要重定向到另一个操作,只需在您的帐户中执行RedirectToAction
return RedirectToAction("MyAction", "MyController")
对于重定向到另一个控制器操作,您不从它创建实例。您使用
TempData["Key"]="lol";
or
Session["key"]="lol";
return RedirectToAction("ActionName", "ControllerName");
对于会话,您可以将您的数据存储在TemData[“key”]或session[“key”]中,并通过另一个类似于
var data=TempData["Key"];
Or
var data =Session["key"];
对于重定向到另一个控制器操作,您不从它创建实例。您使用
TempData["Key"]="lol";
or
Session["key"]="lol";
return RedirectToAction("ActionName", "ControllerName");
对于会话,您可以将您的数据存储在TemData[“key”]或session[“key”]中,并通过另一个类似于
var data=TempData["Key"];
Or
var data =Session["key"];
控制器的会话对象由框架预先填充。它们都指向同一个会话对象,因此您可以直接使用它而无需设置它 在控制器1中
this.Session["MyText"] = "hello from Controller1";
然后在控制器2中
model.MyText = this.Session["MyText"] as string;
这是在请求之间传递数据的典型方式控制器的会话对象由框架预先填充。它们都指向同一个会话对象,因此您可以直接使用它而无需设置它 在控制器1中
this.Session["MyText"] = "hello from Controller1";
然后在控制器2中
model.MyText = this.Session["MyText"] as string;
这是在请求之间传递数据的一种典型方式在web上已找到此解决方案,但HttpContext在我的解决方案中没有属性“Current”。我正在使用ASP.Net MVC 5。@PhilippEger您是在web项目中还是在其他库中执行此操作?旧的ASP.Net web表单“当前”静态访问HTTP上下文的方式在ASP.Net MVC中通常不使用。所有不同的上下文项都由操作调用程序注入控制器实例。在web中已找到此解决方案,但HttpContext在我的解决方案中没有属性“Current”。我正在使用ASP.Net MVC 5。@PhilippEger您是在web项目中还是在其他库中执行此操作?旧的ASP.Net web表单“当前”静态访问HTTP上下文的方式在ASP.Net MVC中通常不使用。所有不同的上下文项都由操作调用程序注入控制器实例。您不能像这样创建自己的控制器实例,这就是导致所有问题的原因。ASP.NET框架创建控制器的实例。如果您想重用动作方法,通常的方法是将客户端重定向到您想要的动作方法,如下所示:您不能像这样创建自己的控制器实例,这就是导致所有问题的原因。ASP.NET框架创建控制器的实例。如果要重复使用操作方法,通常的方法是将客户端重定向到所需的操作方法,如下所示: