浏览器关闭时调用代码隐藏方法

时间:2013-03-04 15:16:08

标签: c# javascript asp.net .net events

我需要找到一种方法来拦截浏览器关闭并调用metod来更新记录,其中包含有关DB中已记录用户的若干信息。当用户注销或关闭浏览器时,更新此记录非常重要。显然,当用户点击“注销”时,我会在服务器端事件中处理更新,但如果用户只是从浏览器退出会怎么样?

有人建议使用window.onbeforeunload事件并对某些WS或WebMethod进行异步调用来执行代码,但这根本不能说服我:onbeforeunload的问题在于它显示确认提示。我需要避免这个消息,只需调用该方法。

所以我想知道是否存在不使用ajax或javascript的“服务器端”解决方案。 例如......一种在会话放弃或会话清除时触发某些事件的方法,或者其他一些方法来解决这个问题只是在代码隐藏...

6 个答案:

答案 0 :(得分:4)

您无法使用服务器端解决方案来了解客户端浏览器中发生的事情。

答案 1 :(得分:1)

我不相信有任何办法可以做你只需要服务器端的东西。客户端是唯一的方法。服务器无法知道浏览器窗口何时关闭,这是HTTP协议的限制。

答案 2 :(得分:0)

是的,您可以在Global.AsaX中放置一个事件,该事件将在会话结束时触发。现在,如果你需要来自客户端的数据来更新数据库等,你需要一种方法来实现它,但如果没有,那么Session_End就可以了。

注意:会话结束与浏览器关闭略有不同,因此这取决于您希望事件触发的内容。

How to handle session end in global.asax?

答案 3 :(得分:0)

  

我想找到一个'服务器端'的解决方案,而不使用ajax或   的JavaScript。

我怀疑这个要求是不可能的。

也许你可以这样做:

  1. 页面上有隐藏的IFRAME
  2. 在此IFRAME上设置Refresh标头(或使用META元素)每隔几秒钟与服务器联系
  3. 如果您在一段时间内没有收到客户的回复,请假设浏览器已关闭。
  4. 但是,我认为这种解决方案不能很好地扩展。

答案 4 :(得分:0)

您是否考虑过像signalr这样的东西?我用它来检测有人打开记录的时间。

public class ChatHub : Hub
{
     public override Task OnDisconnected()
     {
         Broadcaster.Disconnected(Context.ConnectionId);
         return base.OnDisconnected();
     }
}

答案 5 :(得分:0)

目前,我彻底改变了解决问题的方法。 为了更新挂起的行,我使用每晚运行的Quartz.NET框架实现了一个定时作业。