我有一个ascx。在这个ascx中,我可以与任何数量的控件进行交互并设置会话变量,它可以按预期工作。
然而,当(在同一个控件中),我尝试在页面加载中设置会话时,根据我的实现方式,我会得到不同的错误:
System.Web.HttpContext.Current.Session("Test") = "Test"
它说,总结一下,Session对象什么都没有。
相反,如果我说:
Session("Test") = "Test"
然后告诉我,我需要在页面或web.config中启用会话状态。我确实已在web.config中检查并启用了会话,此外,响应单击runat="server"
控件而调用的那些会话语句正常工作。
此时,我几乎可以肯定我的问题是因为我对页面和会话对象的生命周期缺乏了解。因此,我有两个问题:
为什么这不像我预期的那样有效?我怀疑我试图在其他一些使其可用的代码正在执行之前调用Session,但可能是什么呢?
如何使其工作以便我可以在页面加载时将信息存储在会话变量中(并在页面卸载时将其清除)?如果我不能按照我的意愿完成这项工作,我该如何做类似服务器端的事情呢?
答案 0 :(得分:0)
问题是由于在同一浏览器中打开多个标签引起的。
澄清......
比如说我可能在设置会话之前对页面打开了选项卡1,因为我正在调试和延迟并且没有关闭其他选项卡。
然后,也许tab 2是我开始调试时刚打开的当前选项卡。唯一的代码更改是我正在尝试设置会话变量。
现在有两个标签打开,会话状态数据冲突。当前代码尝试设置会话时,它与在“会话所在的任何地方”来回发送的内容相冲突。或者它可能不是真的那样工作,但关闭旧版标签打开“旧代码”,只打开面向“新代码”的标签解决了问题。