我有一个包含多个控件的页面,例如 Checkboxlists 和两个保存搜索结果的容器。
我被告知要使该站点持久化,因此用户可以在浏览我们的站点时从任何地方返回并找到它的设置已恢复(阅读:框已选中;结果仍然可用)
到目前为止,我已经尝试覆盖 SavePageStateToPersistenceMedium 和 LoadPageStateFromPersistenceMedium,但是当我单击页面上的一个按钮时,我经常会遇到黄屏死机。
protected override void SavePageStateToPersistenceMedium(object viewState)
{
string str = "VIEWSTATE_" + Request.UserHostAddress;
Cache.Add(str, viewState, null, DateTime.Now.AddMinutes(Session.Timeout), TimeSpan.Zero, CacheItemPriority.Default, null);
ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", str);
ClientScript.RegisterHiddenField("__VIEWSTATE", "");
}
protected override object LoadPageStateFromPersistenceMedium()
{
string str = Request.Form["__VIEWSTATE_KEY"];
if (!str.StartsWith("VIEWSTATE_"))
{
throw new Exception("Invalid viewstate key:" + str);
}
return Cache[str];
}
我的代码有什么问题吗?我需要调用什么来检索 Page_Load 或 Page_init 上的 Viewstate 来检索它?
编辑:这是通过 session["xyz"] 解决它的方法
List<ListItem> selectItems = new List<ListItem>();
foreach (ListItem item in CheckBoxListLevel.Items)
{
if (item.Selected)
selectItems.Add(item);
}
Session.Add("SavedLevelItems", selectItems);
//然后在Page_Load
if (Session["SavedLevelItems"] != null)
{
List<ListItem> SessionList = (List<ListItem>)Session["SavedLevelItems"];
foreach (var item in SessionList)
{
if (item.Selected)
{
CheckBoxListLevel.Items.FindByText(item.Text).Selected = item.Selected;
}
}
}
但是,如果我查看搜索结果,然后只触发 GET 以返回初始页面,则所有存储的项目都不会正确呈现。