访问控制器内部的会话,但在ActionResult之外

时间:2014-07-29 10:23:18

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

我想在我的控制器中访问一个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;

1 个答案:

答案 0 :(得分:0)

看起来像.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);
    ....

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