我正在尝试从另一个控制器访问我的MVC HomeController的方法,如果未经过身份验证,则将用户重定向到主页。问题是如果我自己实例化我的HomeController中的Session,但是我必须从我的HomeController访问存储在会话中的变量。我试着用这种方式解决问题:
HomeController currentHomeController = new HomeController();
currentHomeController.Session = this.Session;
return currentHomeController.Index();
但Session变量没有setter,所以这不起作用。有没有不同的方法来做到这一点?
我的解决方案
这有效:
return RedirectToAction("Index", "Home");
感谢您的回答!
答案 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;
这是在请求之间传递数据的典型方法