我遇到了ASP.NET 4.0 Web窗体应用程序的间歇性问题。
在Session_Start中,我将主页文件路径存储在会话中:
protected void Session_Start(Object sender, EventArgs e)
{
// Not shown: get master page path from database
Session["MasterPagePath"] = PathIGotFromTheDatabase;
}
然后在我的页面'Page_PreInit中,我使用该会话值来设置Page.MasterPageFile
protected void Page_PreInit(object sender, EventArgs e)
{
Page.MasterPageFile = Session["MasterPagePath"] + @"/MyMasterPage.Master";
}
99%的情况下这种情况有效,但偶尔会出现问题,Session [“MasterPagePath”]为空。用户报告他们必须关闭所有活动的浏览器会话才能再次使用该站点。
我的理解是,由于我在Session_Start中填充了Session [“MasterPagePath”],因此它应始终在我的页面的PreInit方法中可用。如果我的会话已经过期,那么在调用Page_PreInit之前,Session_Start将始终重新填充。
我在这里遗漏了什么吗?在什么条件下我能描述的是什么?我正在使用InProc会话状态来获取它的价值。
答案 0 :(得分:0)
我不认为在Application_Start上添加的Session对象在控制级别是可用的。应用程序[“myObj”]可供所有用户使用。
有关生命周期的更多信息here。