我可以从 httpModule 访问当前页面视图状态吗
Can I access curent page viewstate from httpModule
避免用户单击浏览器的刷新按钮时重新发送请求的已知问题、
我决定添加一个 HttpModule,在其中重写 load_Complete
方法以将页面重定向到自身。我基本上跟踪 HiddenField 值,并在重定向后恢复它们。
这工作正常,现在的问题是页面的视图状态数据在重定向后丢失(这是预期的行为)。
所以,问题是,有没有一种方法可以让我在重定向之前访问页面的视图状态数据(就像我对 HiddenField 控件所做的那样 - _page.Controls
中存在)?也许来自 httpContext?
这是我的 HttpModule 的一个片段:
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
_httpContext = System.Web.HttpContext.Current;
if (_httpContext != null) {
_page = _httpContext.Handler as System.Web.UI.Page;
if (_page != null) {
_page.Load += new EventHandler(_page_Load);
_page.LoadComplete += new EventHandler(_page_LoadComplete);
}
else { return; }
}
else { return; }
}
void _page_LoadComplete(object sender, EventArgs e)
{
if (_page.IsPostBack) {
/*
I Dump all hiddenfield values in 1 session variable
*/
//hoping to do the same for page's ViewState
_httpContext.Response.Redirect(_httpContext.Request.RawUrl, false);
}
}
void _page_Load(object sender, EventArgs e)
{
if (!_page.IsPostBack) {
/*
restore page hiddenfield controls
*/
//hoping to do the same for page's ViewState
}
}
我最终添加了一个基页 class 并将我的所有页面更改为从该基页继承。
在基本页面中,我有 2 个 public 方法,logViewState()
和 restoreViewState()
。基本上这些方法分别将 ViewState 保存到 Session 和从会话中恢复 ViewState。
从 _page_Load
我调用 logViewState()
,然后从 _page_LoadComplete
我调用 logViewState()
希望这对某人有所帮助。
避免用户单击浏览器的刷新按钮时重新发送请求的已知问题、
我决定添加一个 HttpModule,在其中重写 load_Complete
方法以将页面重定向到自身。我基本上跟踪 HiddenField 值,并在重定向后恢复它们。
这工作正常,现在的问题是页面的视图状态数据在重定向后丢失(这是预期的行为)。
所以,问题是,有没有一种方法可以让我在重定向之前访问页面的视图状态数据(就像我对 HiddenField 控件所做的那样 - _page.Controls
中存在)?也许来自 httpContext?
这是我的 HttpModule 的一个片段:
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
_httpContext = System.Web.HttpContext.Current;
if (_httpContext != null) {
_page = _httpContext.Handler as System.Web.UI.Page;
if (_page != null) {
_page.Load += new EventHandler(_page_Load);
_page.LoadComplete += new EventHandler(_page_LoadComplete);
}
else { return; }
}
else { return; }
}
void _page_LoadComplete(object sender, EventArgs e)
{
if (_page.IsPostBack) {
/*
I Dump all hiddenfield values in 1 session variable
*/
//hoping to do the same for page's ViewState
_httpContext.Response.Redirect(_httpContext.Request.RawUrl, false);
}
}
void _page_Load(object sender, EventArgs e)
{
if (!_page.IsPostBack) {
/*
restore page hiddenfield controls
*/
//hoping to do the same for page's ViewState
}
}
我最终添加了一个基页 class 并将我的所有页面更改为从该基页继承。
在基本页面中,我有 2 个 public 方法,logViewState()
和 restoreViewState()
。基本上这些方法分别将 ViewState 保存到 Session 和从会话中恢复 ViewState。
从 _page_Load
我调用 logViewState()
,然后从 _page_LoadComplete
我调用 logViewState()
希望这对某人有所帮助。