我有一个包含许多控件的WebForm,包括大量的网格。我在这些网格上添加了一些回调函数来刷新它们的DataSource,并在每次刷新后更新公共静态类中的一些全局变量。
通常我会在PageLoadComplete
事件处理程序中添加一些方法调用,但之后会引发回调。我还尝试使用OnPrerender
,OnPrerenderComplete
和OnSaveStateComplete
方法覆盖,但这些似乎不适用于回调。 (我不能使用OnUnload
覆盖,因为我需要使用Request
对象。)
这是实际问题:
我可以使用任何事件处理程序吗?或者我可以创建一个事件并在其他所有事件完成后提升它吗?
我希望它作为任何类型的每个回调/回发的最后一步执行(但在页面卸载之前,我仍然可以使用Response
和Request
对象。
网格是DevExpress的ASPxGridViews。
更新
在搜索了一段时间之后,我发现PreRender
事件在asp:UpdatePanels的异步回发期间被触发,但在DevExpress的回调期间没有(这是正常行为)。
那么,真正有用的是找到/创建一个我可以使用的事件。我还想在PageLoad执行期间从Request Object中获取我想要的数据,并在稍后卸载时使用它们。
每种方法的优缺点是什么?在做出决定之前,我需要知道什么重要的事情,还是有什么我可能会忽略的?我担心第二个选项,因为我必须声明一些类变量,我觉得它们已经有太多了。
答案 0 :(得分:1)
鉴于在DevExpress的CallBacks期间没有执行PreRender
,PreRenderComplete
和SaveStateComplete
方法覆盖,我找到了另一种使用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
唯一的问题是我无法移除此处理程序,但这没什么大不了的,因为在每次向服务器发出请求时都会重新创建对象。