【问题标题】:Access Session inside controller but outside ActionResult在控制器内部但在 ActionResult 外部访问 Session
【发布时间】:2014-09-20 16:39:47
【问题描述】:

我想访问控制器中的 Session 变量,但我不能。 ActionResult 方法中的变量可以正常工作,但第一个不工作。 我想声明为私有变量,因为我将在所有 actionresults 中使用

这是我的代码

public class MyController : Controller
{

    private Roles rol = Session["rol"] as Roles;

    // GET: 
    public ActionResult Index()
    {

        Roles rol = Session["rol"] as Roles;

我编辑主​​题是因为我无法添加新问题。


这就是 ActionResult 方法的工作。

这是我得到的错误:error 我尝试添加新的用法,尝试使用 httpContext 和其他东西,但我做得不好。

忘记角色。 我的问题是(在下一个代码上):为什么 c2 变量工作正常,从我的会话中获取数据而 c1 不工作?

public class MyController : Controller
{

    private Clients c1 = Session["client"] as Clients;

    // GET: 
    public ActionResult Index()
    {

        Clients c2 = Session["client"] as Clients;

【问题讨论】:

  • 你应该添加一个或两个关于你正在使用的框架的标签。
  • 好吧,对不起,我正在使用 mvc 5

标签: c# asp.net-mvc session asp.net-mvc-5


【解决方案1】:

看起来像 .NET MVC。当您的应用程序启动时,没有会话变量。所以这一行:

private Roles rol = Session["rol"] as Roles;

不能工作

一旦用户访问您的网站(和您的 ActionResult),就可以为他创建会话变量。您可以将用户角色存储在会话变量中,并在特定用户的所有 ActionResult 函数中使用它

public ActionResult Index()
{ 
   Session["rol"] = Roles.GetRolesForUser();
   ....

也许可以说出您想要达到的目标,以便我们提供更多帮助

编辑:

这一行

private Clients c1 = Session["client"] as Clients;

无法工作,因为它会在首次使用控制器时运行。您根本不能在控制器的初始化中使用会话变量。会话变量仅在用户创建它们之后才存在,这可以在操作结果中完成。会话变量与用户相关联。

您是否可以使用简单的全局变量而不是会话?

public class MyController : Controller
{

private static List<Client> c1 = new List<Client>();

// GET: 
public ActionResult Index()
{
    ....
    // you can access c1 here, change it, etc
    c1.Add(client);
    ....

简短回答:您正在尝试使用尚未创建的变量

【讨论】:

  • 我在最初的帖子中添加了一些信息。对不起,我的英语不太好。希望这次我解释得更好。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
相关资源
最近更新 更多