2

我有一个带有许多控件的 WebForm,包括大量的网格。我在这些网格上添加了一些回调函数来刷新它们的 DataSource 并在每次刷新后更新公共静态类中的一些全局变量。

通常我会在PageLoadComplete事件处理程序中添加一些方法调用,但之后会引发回调。我也尝试使用OnPrerender,OnPrerenderCompleteOnSaveStateComplete方法覆盖,但这些似乎不适用于回调。(我不能使用OnUnload覆盖,因为我需要使用Request对象。)

这是实际问题:
我可以使用任何事件处理程序吗?或者我可以创建一个事件并在其他所有内容完成后提出它吗?

我希望它作为任何类型的每个回调/回发的最后一步执行(但在页面卸载之前,我仍然可以使用ResponseandRequest对象)。

网格是 DevExpress 的 ASPxGridViews。


更新

搜索了一段时间后,我发现该PreRender事件是在 asp:UpdatePanels 的异步回发期间触发的,但在 DevExpress 的回调期间没有触发(这是正常行为)。

所以,真正有帮助的是找到/创建一个我可以使用的事件。我还在考虑在 PageLoad 执行期间从请求对象中获取我想要的数据,然后在 Unload 中使用它们。

每种方法的优缺点是什么?在做出决定之前我需要知道什么重要的事情,或者有什么我可能会忽略的事情吗?我担心使用第二个选项,因为我必须声明一些类变量,而且我觉得它们已经太多了。

4

1 回答 1

1

鉴于在 DevExpress 的回调期间不执行PreRender,PreRenderCompleteSaveStateComplete方法覆盖,我找到了使用 OnUnload 方法的替代方法。

首先在 Page_Load 方法上,使用 Request Object 进行一些检查,如果满足条件,则将 Handler 附加到 Unload Event,并使用 Lambda 表达式将参数传递给这个 sub。

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    '//Some Code// 
        If Request.Params("__CALLBACKPARAM").Contains("REFRESH") Then
            AddHandler Me.Unload, Sub() Page_Unload(sender,e,Request)
        End If
    End Sub

这样, Page_Unload 子程序将仅在需要时执行,并带有它需要的所有参数,同时成功地避免了添加更多全局变量。

Protected Sub Page_Unload(sender As Object, e as System.EventArgs, req As HttpRequest)
    '//Some Code//
End Sub

唯一的问题是我无法删除此处理程序,但这没什么大不了的,因为在对服务器的每个请求时,都会重新创建对象。

于 2013-09-25T07:42:01.257 回答