在回调时执行的最后一页事件

时间:2013-09-19 13:01:58

标签: asp.net vb.net events

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

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

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

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

网格是DevExpress的ASPxGridViews。


更新

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

那么,真正有用的是找到/创建一个我可以使用的事件。我还想在PageLoad执行期间从Request Object中获取我想要的数据,并在稍后卸载时使用它们。

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

1 个答案:

答案 0 :(得分:1)

鉴于在DevExpress的CallBacks期间没有执行PreRenderPreRenderCompleteSaveStateComplete方法覆盖,我找到了另一种使用OnUnload方法的方法。

首先在Page_Load方法上,在使用请求对象进行一些检查之后,如果满足条件,则将Handler附加到Unload Event,并使用Lambda表达式参数传递给此子。

    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

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