从另一个类在ASP.Net MVC Controller中设置会话

时间:2014-11-21 08:58:48

标签: c# asp.net asp.net-mvc asp.net-mvc-4

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

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

但Session变量没有setter,所以这不起作用。有没有不同的方法来做到这一点?

我的解决方案

这有效:

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

感谢您的回答!

3 个答案:

答案 0 :(得分:4)

要重定向到另一个控制器操作,您必须从中创建实例..您可以使用

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 :(得分:3)

您可以通过Session

访问Http.Context.Current

在您的其他课程中

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

如果您需要在行动中仅RedirectToAction重定向到另一个操作

return RedirectToAction("MyAction", "MyController")

答案 2 :(得分:0)

控制器的Session对象由框架预先填充。它们都指向相同的Session对象,因此您可以在不设置它的情况下使用它

在Controller1中

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

然后在Controller2中

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

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