如何在请求之间存储ASP.NET WebForms页面状态

时间:2011-12-03 14:36:59

标签: webforms viewstate session-state page-lifecycle

首先,这是我想要实现的目标:

想象一下带有GridView的ASP.NET页面和其他一些控件。用户对GridView应用一些分页,排序和过滤,然后单击一个链接并转到另一个页面。他或她最终可以浏览更多页面,然后返回到GridView页面。然后,当她离开页面时,她看到网格具有相同的分页/排序/过滤。

我可以轻松地对一个页面执行此操作,但我需要将此行为应用于几十页。

我希望得到以下效果:

String PageStateKey {
  get { return "PageState_" + Page.UniqueID; }
}

void Page_PreRender() {
    // this is executed in every postback, and saves page state for future requests
    var pageState = GetCurrentPageState(); // gets an object with ViewState, query string, and form values
    Session[PageStateKey] = pageState; // persist page state to session
}

void Page_Init() {
    // this restores a page state saved in a previous request, if any
    var restoredPageState = Session[PageStateKey];
    if (restoredPageState != null) {
       ApplySavedStateToPage(restoredPageState);
    }
}

然后我的网页可以继承StatePage或类似的东西。我发现了一些解决方案,但它们需要更改我的代码(即:使用自定义方法重定向页面而不是Response.Redirect等)。

提前致谢

1 个答案:

答案 0 :(得分:4)

我能够使用这个解决方案来解决它:

http://www.codeproject.com/KB/applications/persistentstatepage.aspx?fid=73573&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&fr=26

我只做了两次修改:

1)取消注释第39行,使其适用于ASP.NET 4:

// EnableEventValidation=false;

2)将SavePageStateToPersistentMedium更改为始终调用SavePageState(),无论它是否为重定向