C# MVC Session is null

本文关键字:null is Session MVC | 更新日期: 2023-09-27 18:27:22

我有两个控制器:ControllerA和ControllerB,并在ControllerA中设置会话值,但在ControllerB中无法获取值,代码如下:

public class ControllerA : Controller
{
    public ActionResult Index()
    {
        Session["a"] = "test";
    }
}
public class ControllerB : Controller
{
    public ActionResult Index()
    {
        ViewBag.Test = Session["a"].ToString();
    }
}

我尝试使用cookie来代替会话,但遇到了同样的问题。我不知道我是否应该在C#MVC中使用会话,请让我知道是否有比会话更好的东西。非常感谢。

C# MVC Session is null

这可能是IIS中SystemIdleTime变量的问题。请您的托管提供商将此值增加到30分钟或0以无超时。

您可以查看文章

还可以查看我几天前发布的类似问题

首先创建SessionController.cs

public class SessionController
{
    const string sessionname = "UserContext";
    public static SessionDetail UserContext
    {
        get
        {
            return System.Web.HttpContext.Current.Session[sessionname] as SessionDetail;
        }
        set
        {
            HttpContext.Current.Session[sessionname] = value;
        }
    }
}
 public class SessionDetail
 {
      public string Employee_ID { get; set; }
 }

将此控制器继承到使用会话的任何其他控制器

例如:

public class DashboardController : SessionController
{
    SessionController.UserContext.Employee_ID = "1";//Assign Value
    var empId =   SessionController.UserContext.Employee_ID; //Use Value
    ....
}

然后将此代码添加到Global.asax

protected void Session_Start()
{
     SessionDetail sdetail = new SessionDetail();
     SessionController.UserContext = sdetail;
}

在从会话中获取值之前,您应该设置会话的值,尝试执行控制器A的索引方法,然后尝试执行控制器B,它会起作用,否则执行失败,您将得到excat问题

对于控制器之间的通信,您可以使用tempdata而不是会话