【问题标题】:Destructor in Asp.netAsp.net 中的析构函数
【发布时间】:2013-03-04 16:56:23
【问题描述】:

当我们转到另一个页面时运行的事件是什么。卸载了吗?

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

End Sub

【问题讨论】:

  • 不保证任何事件都会运行。
  • 而且,对于“析构函数”,您的页面实例的 finalizer 经常在您的用户看到页面之前运行。请记住,页面实例仅在一个 http 请求的生命周期内持续存在。甚至同一会话中同一页面的回发也是由不同的实例处理的。页面实例运行页面生命周期以生成发送到浏览器的 html。一旦这个 html 准备好并被传输,页面实例就可以被 GC 收集。有时这发生在浏览器甚至可以将响应呈现给显示器之前。
  • 导航到另一个页面发生在客户端,而不是服务器端。一旦您在浏览器中看到该页面,就不再涉及服务器。除非您使用某种服务器端链接,例如LinkButton,否则没有与从一个页面导航到另一个页面相关的服务器端事件。即使这样,您也无法控制用户只需在浏览器中输入不同的 url 并完全绕过服务器重定向。

标签: c# asp.net vb.net


【解决方案1】:

Unload 出现在请求的末尾*。它与导航到其他页面没有任何关系。页面在单个请求的整个过程中“加载”和“卸载”;它出现的唯一原因是 Web 表单的东西在幕后发挥的魔力。

如果您想查看这是新加载还是回发,Page 类有一个 IsPostBack 属性,当页面中的某些内容触发回发到同一页面时,该属性为真。如果它是假的,那么这是一个新的请求,应该得到适当的处理。

除此之外,除了跟踪在会议。

*(它被定义为页面生命周期中的最后一个事件,但如果请求因任何原因提前终止,则可能不会触发。重定向和传输是主要示例。)

【讨论】:

    【解决方案2】:

    UnloadASP.NET Page Lifecycle 中的最后一个事件。

    来自docs

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

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

    【讨论】:

    • 这与导航到其他页面有什么关系?
    • @mellamokbtheWise 啊,看来我看错了。我会编辑答案。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果您希望在页面离开时捕获事件,您可以使用 javascript 调用服务器方法。尽管这可行,但您似乎无法在服务器代码中停止该进程。查看我开始的最后一个主题:

      preventing page from being redirected

      在其中,我确实发布了一个示例,说明如何使用 javascript 检测页面即将离开并在此之前调用服务器方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-09
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 2016-12-19
        • 2013-03-17
        • 2010-11-29
        相关资源
        最近更新 更多