代码之家  ›  专栏  ›  技术社区  ›  Simon Dugré Metin Atalay

有没有办法知道用户正在使用asp.net离开页面?

  •  2
  • Simon Dugré Metin Atalay  · 技术社区  · 17 年前

    但在我的例子中,我想在我的代码隐藏中做一些事情(清理对象)。

    5 回复  |  直到 13 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    真的没有办法。浏览器返回时不会触发任何事件。

    您可以使用Javascript来实现,但这充其量也很困难。

    question here .

    这个脚本也可以工作。它被发现了 here

    <script>
    
    window.onbeforeunload = function (evt) {
    var message = ‘Are you sure you want to leave?’;
    if (typeof evt == ‘undefined’) {
    evt = window.event;
    }
    if (evt) {
    evt.returnValue = message;
    }
    return message;
    }
    
    </script> 
    
        2
  •  3
  •   Tom Ritter    17 年前

    可以 采取一些行动。但是,你不知道他是离开你的页面去你的另一个页面、另一个网站,还是关闭浏览器。

    因此,使用javascript通知清理对象(缓存或会话)是一个有缺陷的系统。使用cache&独立于onunload通知的会话无效策略。

        3
  •  3
  •   Steve Wortham    17 年前

    如果这样做的目的是清理代码中的对象,那么依赖会话超时是否足够好?在清理这些对象(或者设置会话超时的任何对象)之前,需要20分钟的延迟。

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
      ' Clean up stuff
    End Sub
    
        4
  •  1
  •   JohnFx    17 年前

    这是不可能的,因为代码隐藏在另一台计算机(web服务器)上运行,并且不知道用户计算机上发生了什么,除非浏览器将请求发送回服务器(这需要一些Javascript或其他客户端代码)。

    如果必须,请使用会话超时事件清除请求生存期之外存储的任何状态信息。

        5
  •  0
  •   Simon Dugré Metin Atalay    17 年前

    EUUWW。。。好的。我的问题是因为我在会话变量中存储了一个对象(带有一系列搜索标准)。通过将其存储在会话变量中,如果用户返回到我的搜索页面结果,它将列出与上次相同的结果。但是,经过一些反思(不是在代码中,而是在我的头脑中,在看到你的答案:oP之后),我会在我的对象中添加一个布尔属性,它的意思是“IsDirty”或“HasBeenListed”。当我重新加载时,如果设置为dirty,它将重定向回另一个页面。

    推荐文章