2013-03-04 81 views
5

当我们转到另一页时运行的事件是什么。它卸载了吗?Asp.net中的析构函数

Protected Sub Edit_Unload(sender As Object, e As EventArgs) Handles Me.Unload 

End Sub 
+6

无法保证任何活动将会运行。 – 2013-03-04 16:57:40

+0

而对于“析构函数”,页面实例的_finalizer_经常在用户看到页面之前运行。请记住,一个页面实例只能持续一个http请求的生命。即使是同一会话中的同一页面的回发也是由不同的实例处理的。页面实例运行页面生命周期来生成发送给浏览器的html。一旦这个html准备好并发送完毕,页面实例就可以被GC收集。有时,这发生在浏览器甚至可以呈现对显示器的响应之前。 – 2013-03-04 16:59:49

+2

导航到另一个页面发生在客户端,而不是服务器端。一旦您在浏览器中看到该页面,就不再涉及服务器。除非您使用某种服务器端链接,如“LinkBut​​ton”,否则不存在与从一个页面导航到另一个页面相关的服务器端事件。即使这样,您也无法控制用户只需在浏览器中输入其他网址并完全绕过服务器重定向。 – mellamokb 2013-03-04 17:02:02

回答

3

Unload是在ASP.NET Page Lifecycle的最后一个事件。

docs

提高了每个控件,然后页面。在控件中,使用此事件为特定控件执行最终清理,例如关闭控制特定的数据库连接,即 。对于页面本身,请使用此事件进行最终清理工作,如关闭打开的文件和数据库连接,或完成日志记录或其他 特定于请求的任务。

但是,当重定向到另一个页面时,可能不会调用此方法。

+0

这与导航到其他页面有什么关系? – mellamokb 2013-03-04 16:59:37

+0

@mellamokbtheWise啊,似乎我误读了。我会编辑答案。 – 2013-03-04 17:00:45

3

Unload发生在请求结束时*。它与导航到其他页面没有任何关系。页面在单个请求的过程中“加载”和“卸载”;除此之外,唯一的原因就是Web Forms在幕后做的事。

如果要查看这是新的加载还是回发,则Page类的IsPostBack属性在页面中的某些内容触发回发到同一页面时为true。如果它是错误的,那么这是一个新的请求,应该适当处理。

除此之外,我不知道的方式告诉当有人专门去另一个页面(而不是仅仅刷新当前页面),除了跟踪会话访问的最后一页。

*(它被定义为在页面生命周期的最后一场比赛,但是如果要求提前终止因任何原因可能不会闪光。重定向和传输是最好的例子。)

1

此链接可能是对你有用:Page Life Cycle Overview。虽然你不能依赖运行的事件,但这是一个很好的指导,可以显示它们运行的​​顺序(以及时间)。

0

如果您希望在页面离开时捕获事件,可以使用javascript调用服务器方法。虽然这可行,但它似乎不能阻止服务器代码中的进程。看看我的最后一个线程,我开始:

preventing page from being redirected

在这里面,我也张贴了如何使用JavaScript来检测页面即将离开,并调用服务器方法在这之前发生的例子。