确保在页面生命周期中的任何其他内容之前存储了某些内容

时间:2012-03-06 14:41:37

标签: c# asp.net session page-lifecycle

我希望在页面的生命周期中发生任何其他事情之前,在Session对象(即用户ID)中存储内容。
我尝试将它放在Page的构造函数中,但是Session对象尚不可用 我尝试覆盖OnInit,但是其他代表挂钩到Init事件可能仍然会被执行。

我真的迷失了,尽管这听起来像是非常基本的ASP.NET理论。

2 个答案:

答案 0 :(得分:2)

更常用的方法是封装对Session中数据的访问,并在第一次访问时按需加载。基本模式如下所示:

public string UserId
{
    get
    {
        string s = Session["UserId"];
        if (s == null)
        {
            s = ... Get UserID from somewhere, e.g. database
            Session["UserId"] = s;
        }
        return s;
    }
}

通过这种方式,数据将在第一次需要时加载,而您无需关心页面生命周期中的数据。

答案 1 :(得分:1)

您可以覆盖OnInit()方法,实现代码,并添加对base.OnInit()的最终调用,从而引发已注册的Init事件。