我可以从 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()

希望这对某人有所帮助。