在我的Global.asax中,我在Session_Start()中有这段代码:
UserIntranet user = new UserIntranet();
user.Login = this.Request.LogonUserIdentity.Name.Split('\\')[1];
Session["user"] = user as UserIntranet;
在我的BaseController中,我有这个属性:
public UserIntranet UserIntranet
{
get
{
return Session["user"] as UserIntranet;
}
}
它适用于使用此基本控制器的所有矿场控制器,但不在我自己的BaseController构造函数中。
此会话为空......
在我的BaseController中试试这个:
public BaseController()
{
ViewBag.UserMenu = this.UserIntranet.Login;/* Null */
}
为什么呢?如何让用户直接在我的BaseController中登录?有什么更好的方法?
答案 0 :(得分:19)
这是正常的,所有HttpContext
相关对象(例如Session
)尚未在ASP.NET MVC控制器的构造函数中初始化。这可以在稍后阶段使用您可以使用的Initialize
方法:
public BaseController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
ViewBag.UserMenu = this.UserIntranet.Login;
}
}