Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法知道用户正在使用asp.net离开页面?_C#_Asp.net_Events - Fatal编程技术网

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

C# 有没有办法知道用户正在使用asp.net离开页面?,c#,asp.net,events,C#,Asp.net,Events,我的问题有点棘手。至少我认为是这样。无论如何,也许不是。我想知道是否有办法知道用户是否正在离开页面。无论他点击“上一步按钮”,关闭窗口或点击我网站上的链接。如果我的内存仍然良好,我认为使用JavaScript是可能的 但在我的例子中,我想在代码隐藏中做一些事情(清理对象)。真的没有办法。浏览器返回时不会触发任何事件 您可以使用Javascript来实现,但这充其量也很困难 看 这个脚本也可以工作。它被发现了 window.onbeforeunload=函数(evt){ var message=

我的问题有点棘手。至少我认为是这样。无论如何,也许不是。我想知道是否有办法知道用户是否正在离开页面。无论他点击“上一步按钮”,关闭窗口或点击我网站上的链接。如果我的内存仍然良好,我认为使用JavaScript是可能的


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

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

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

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


window.onbeforeunload=函数(evt){
var message='您确定要离开吗?';
如果(evt的类型==‘未定义’){
evt=window.event;
}
如果(evt){
evt.returnValue=消息;
}
返回消息;
}

用户离开页面时,可以使用javascript通知服务器。但是一旦网页离开服务器,Web服务器就会洗刷它的手,而用户可能会将网页打开一周

如果您在页面上使用javascript在页面卸载时向服务器发出通知,您可以采取一些措施。但是,你不知道他是离开你的页面去你的另一个页面、另一个网站,还是关闭浏览器

最后的通知也不能保证总是发送,所以你不能完全依赖它


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

如前所述,您可以在JavaScript中不可靠地执行此操作,但从您问题的措辞来看,我假设您希望在服务器端代码(“代码隐藏”)中执行此操作

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


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

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

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

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

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


谢谢大卫。

是的,有些想法不错,但我想我的主要帖子还不够清楚。这是为了防止当用户返回到处理会话变量的页面时。。。见我的第二篇文章。感谢您的回复。请注意:如果您使用的是状态服务器或SQL Server状态管理,会话结束将不会启动。您可能只需要显式清除Page_Load或Init上的会话对象,而不是查找“leaving”事件。回答不错。非常清楚。。。尤其是像我这样经常说法语的人。感谢我猜每次回发都会触发
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  ' Clean up stuff
End Sub