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

时间:2009-07-30 20:39:36

标签: c# asp.net events

我的问题有点棘手。至少我认为。反正也许不是。我想知道是否有任何方法可以知道用户是否离开了该页面。无论他点击“上一个按钮”,关闭窗口或点击我网站上的链接。如果我的记忆仍然很好,我认为使用JavaScript是可能的。

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

5 个答案:

答案 0 :(得分:3)

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

你可以用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> 

答案 1 :(得分:3)

当用户离开页面时,您可以使用javascript告诉服务器。但是,一旦网页离开服务器,网络服务器就会将页面移到页面上,而用户可能会将页面打开一周。

如果您在页面卸载时使用页面上的javascript向服务器发出通知,则可以采取某些操作。但是,您无法判断他是否将您的页面留在您的另一个页面,另一个网站或关闭浏览器。

并且不保证始终发送最后一次通知,因此您不能完全依赖它。

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

答案 2 :(得分:3)

如果这样做的目的是清除代码隐藏中的对象,那么依赖会话超时是否足够好?在清理这些对象之前(或者你设置了会话超时的任何内容),这将是一个20分钟的延迟。

但这是一种简单可靠的方法。在您的Global.asax文件中,您只需执行此操作:

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  ' Clean up stuff
End Sub

答案 3 :(得分:1)

如前所述,你可以在JavaScript中不可靠地做到这一点,但我假设你要在服务器端代码(“代码隐藏”)中使用你的问题的措辞。

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

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

答案 4 :(得分:0)

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

感谢大卫。