4

在我的 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 中获取用户登录?更好的方法是什么?

4

1 回答 1

19

这很正常,所有HttpContext相关对象,例如SessionASP.NET MVC 控制器的构造函数中尚未初始化。这发生在稍后阶段,Initialize您可以使用以下方法:

public BaseController: Controller
{
    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        ViewBag.UserMenu = this.UserIntranet.Login;
    }
}
于 2013-08-14T14:32:54.427 回答