确保某些内容存储在会话中,而不是页面生命周期中的其他内容

本文关键字:周期 其他 生命 存储 确保 会话 | 更新日期: 2023-09-27 18:27:06

我想在页面生命周期中发生任何其他事情之前,在Session对象中存储一些东西(即用户ID)
我试着把它放在Page的构造函数中,但Session对象当时还不可用
我尝试覆盖OnInit,但随后挂接到Init事件的其他委托可能仍在之前执行。

我真的很失落,尽管这感觉像是非常基本的ASP.NET理论。

确保某些内容存储在会话中,而不是页面生命周期中的其他内容

一种更常见的方法是在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;
    }
}

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

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