我正在存储一个会话变量,我使用它作为各种数据访问调用的参数传递。这个变量是在第一次创建会话时设置的,用户可以根据他们可以访问的资源来更改它。例如,当用户第一次登录时,其默认会话值可能被设置为"1"。在页面的顶部是一个下拉列表,其中包含了他们可以访问的所有选项,更改此选项会更改会话变量…1、2、3、4……等。
问题是,由于以下原因之一,该会话变量可能在回发之间发生变化:
- 会话超时,导致会话重新创建,默认值为1
- 用户打开两个选项卡/浏览器窗口,并在一个选项卡上更改它,然后切换到另一个页面,其中使用"1"作为值
这会导致页面上的控件变得"陈旧",并且回发行为不正确。在事件处理程序中依赖会话变量的按钮单击事件可能不是"预期的"事件,并且接口具有误导性。
我想能够做的是确定会话变量的值是否在回发之间发生了变化,如果它重定向到同一页面,导致它使用新的会话变量值重新渲染,并给用户一个明确的指示,每次回发实际做什么。
任何想法?
为什么不使用cookie来存储该变量呢?我想这样就能解决你们的问题了。
我最后做的是添加一个隐藏字段到我的主页,然后把它放在后面的代码:
if (!Page.IsPostBack)
{
//SelectedID comes from masterpage property (Session variable)
hiddenField.Value = SelectedID.ToString();
...
}
else
{
int selectedId = Int32.Parse(hiddenField.Value);
if (selectedId != SelectedID)
{
Response.Redirect(Request.RawUrl);
}
}