在另一个类 ASP.Net MVC 控制器中设置会话

本文关键字:控制器 设置 会话 MVC Net 另一个 ASP | 更新日期: 2023-09-27 18:31:16

我正在尝试从另一个控制器访问我的MVC HomeController的方法,以便在用户未通过身份验证时将用户重定向到主页。问题是,如果我自己实例化它,则不会设置家庭控制器中的会话,但我必须从我的家庭控制器访问存储在会话中的变量。我试图以这种方式解决问题:

HomeController currentHomeController = new HomeController();
currentHomeController.Session = this.Session;
return currentHomeController.Index();

但是会话变量没有设置器,所以这不起作用。有没有不同的方法可以做到这一点?

我的解决方案

这有效:

 return RedirectToAction("Index", "Home");

感谢您的回答!

在另一个类 ASP.Net MVC 控制器中设置会话

您可以通过

Http.Context.Current访问Session

在您的其他课程中:

var myVar = HttpContext.Current.Session["MyVar"]

如果您需要重定向到另一个操作,只需在您的帐户中RedirectToAction

return RedirectToAction("MyAction", "MyController")

要重定向到另一个控制器操作,您不要从中创建实例。您使用自

TempData["Key"]="lol";
or
Session["key"]="lol";
return RedirectToAction("ActionName", "ControllerName");

对于会话,您可以将您的数据存储在 TemData["key"] 或会话 ["key"] 中,并获取您的另一个操作,例如

var data=TempData["Key"]; 
Or
var data =Session["key"];

控制器的 Session 对象由框架预填充。它们都指向同一个 Session 对象,因此您无需设置即可使用它

在控制器 1 中

this.Session["MyText"] = "hello from Controller1";

然后在控制器 2 中

model.MyText = this.Session["MyText"] as string;

这是在请求之间传递数据的典型方式