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中使用会话,请让我知道是否有比会话更好的东西。非常感谢。
这可能是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而不是会话