【问题标题】:Set session in ASP.Net MVC Controller from another class从另一个类在 ASP.Net MVC 控制器中设置会话
【发布时间】:2014-11-21 08:58:47
【问题描述】:

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

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

但是 Session 变量没有设置器,所以这不起作用。有没有其他方法可以做到这一点?

我的解决方案

这行得通:

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

感谢您的回答!

【问题讨论】:

  • 你不能像这样创建自己的控制器实例,这就是导致你所有问题的原因。 ASP.NET 框架创建控制器的实例。如果你想重用action方法,正常的方法是把客户端重定向到你想要的action方法,像这样:stackoverflow.com/a/27057561/7724

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


【解决方案1】:

您可以通过Http.Context.Current访问Session

在你的其他班级:

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

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

return RedirectToAction("MyAction", "MyController")

【讨论】:

  • 在网上找到了这个解决方案,但是 HttpContext 在我的解决方案中没有属性“Current”。我正在使用 ASP.Net MVC 5。
  • @PhilippEger 你是在网络项目还是在其他库中执行此操作?
  • 在 ASP.NET MVC 中通常不使用旧的 ASP.NET Web 窗体“当前”静态访问 HTTP 上下文的方式。所有不同的上下文项都由 Action Invoker 注入到 Controller 实例中。
【解决方案2】:

为了重定向到另一个控制器动作,你不要从它创建实例..你使用 from

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

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

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

【讨论】:

    【解决方案3】:

    控制器的 Session 对象由框架预先填充。它们都指向同一个 Session 对象,所以你可以不用设置就直接使用它

    在控制器 1 中

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

    然后在Controller2中

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2015-10-02
      • 1970-01-01
      • 2018-08-16
      • 2020-11-01
      • 2019-05-13
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多