我有一个当前的问题,如果我们打开另一个页面并在那里进行一些回发,则在一个页面上,Viewstate 信息正在消失,即:
- 打开 ListPage,更改表单选择的选项并进行回发
- 按下在新选项卡上打开 AddPage 的按钮
- 在 AddPage 上,添加几个执行多个回发的新条目,关闭选项卡
- 返回 ListPage 尝试刷新网格
- 在 ListPage 上,视图状态为空
因此,如果我有一个属性正在存储并从视图状态中获取它的值,那么在第 5 步中将从视图状态中获取 null。
if (ViewState["Stuff"] == null)
return MyObject.Default;
else
return (MyObject)ViewState["Stuff"];
据我了解,viewstate 历史大小默认为 9 ( <sessionPageState historySize="9" />
),但我没想到这会在不同页面之间共享,也不想更改此值。
我可以通过将它们存储在会话中并使用每页生成的 Guid 来绕过存储的属性,但是需要重新设置表单控件以及从数据库中获取其值的任何内容。
有什么方法可以使选项卡/窗口之间的视图状态历史独立?或者知道如何绕过它?
如果有帮助,我会在每个页面上使用 Telerik 控件。
编辑:这个解释帮助我理解视图状态信息是如何存储在会话中的,以及sessionPageState配置如何影响它。