在ASP.NET中控制LoadPostData()之前修改Post数据

时间:2011-03-12 10:19:17

标签: asp.net

我们希望在请求被执行后“重播”复杂的过滤器ui并且用户返回过滤器页面。

由于过滤器非常复杂和动态,我们不想遍历所有项目并记住所选值,然后应用代码中保存的值 - 帖子数据包含所有选定的选项...

所以我们的目标是拦截一个!IsPostBack请求,检查我们是否有一个已保存的场景过滤器,将保存的帖子数据注入到请求中,然后继续让所有ASP.NET控件完成它们的工作,就像它一样是一个回发。

到目前为止我们尝试了什么:

  • 保留表单的Server.Transver是一个不错的主意,但Request.Form是一个只读集合。
  • 使用自定义帖子数据向同一页面创建新的HttpWebRequest似乎会阻止IIS工作进程。
  • 不确定IHTTPHandler是否可以修改Post数据或者是否已经太晚了?

有什么想法吗?这对于重播任何类型的请求都非常酷且非常灵活......

1 个答案:

答案 0 :(得分:0)

我们最终记住Session中的选定值,然后在重新加载页面时应用:

定义

Private Property SavedFilter() As Dictionary(Of String, Object)
            Get
                If Session("savedFilter") Is Nothing Then
                    Session("savedFilter") = New Dictionary(Of String, Object)()
                End If

                Return CType(Session("savedFilter"), Dictionary(Of String, Object))
            End Get
            Set(ByVal value As Dictionary(Of String, Object))
                Session("savedFilter") = value
            End Set
        End Property

保存

SavedFilter.Clear()
SavedFilter.Add(txtReactor.ID, txtReactor.Text)
SavedFilter.Add(AllCountriesCheckBox.ID, AllCountriesCheckBox.Checked) [...]

应用

txtReactor.Text = SavedFilter(txtReactor.ID)
AllCountriesCheckBox.Checked = SavedFilter(AllCountriesCheckBox.ID) [...]