C# 在我的BaseController构造函数中获取现有会话
在my Global.asax中,会话_Start()中有以下代码: 在我的BaseController中,我有以下属性:C# 在我的BaseController构造函数中获取现有会话,c#,asp.net-mvc,session,asp.net-mvc-controller,C#,Asp.net Mvc,Session,Asp.net Mvc Controller,在my Global.asax中,会话_Start()中有以下代码: 在我的BaseController中,我有以下属性: public UserIntranet UserIntranet { get { return Session["user"] as UserIntranet; } } 它适用于所有使用此基本控制器的矿山控制器,但不适用于我的基本控制器构造函数本身 此会话为空 请在我的BaseController中尝试以下操作: public B
public UserIntranet UserIntranet
{
get
{
return Session["user"] as UserIntranet;
}
}
它适用于所有使用此基本控制器的矿山控制器,但不适用于我的基本控制器构造函数本身
此会话为空
请在我的BaseController中尝试以下操作:
public BaseController()
{
ViewBag.UserMenu = this.UserIntranet.Login;/* Null */
}
为什么??如何在BaseController中直接获得用户登录?更好的方法是什么?这很正常,所有
HttpContext
相关对象(如会话
)尚未在ASP.NET MVC控制器的构造函数中初始化。这将在稍后阶段发生,您可以使用以下方法:
public BaseController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
ViewBag.UserMenu = this.UserIntranet.Login;
}
}
什么意思?覆盖该方法?但我如何才能获得现有的会话?你能给我举个例子吗?当然,我已经用一个例子更新了我的答案。不要试图在控制器的构造函数中使用会话,你应该重写
Initialize
方法,你可以在那里使用会话。你是我的英雄:)非常感谢!
public BaseController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
ViewBag.UserMenu = this.UserIntranet.Login;
}
}