Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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# 关闭浏览器时调用代码隐藏方法_C#_Javascript_Asp.net_.net_Events - Fatal编程技术网

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

C# 关闭浏览器时调用代码隐藏方法,c#,javascript,asp.net,.net,events,C#,Javascript,Asp.net,.net,Events,我需要找到一种方法来截获浏览器关闭,并调用metod来更新记录,其中包含有关数据库中已登录用户的一些信息。当用户注销或关闭浏览器时,更新此记录非常重要。显然,当用户单击“注销”时,我会在服务器端事件中处理更新,但如果用户只是从浏览器中退出呢 有人建议使用窗口.onbeforeunload事件并对某些WS或WebMethod进行异步调用以执行代码,但这根本不能说服我:onbeforeunload的问题在于它显示了确认提示。我需要避免此消息,只需调用该方法 所以我想知道是否有一种不使用ajax或ja

我需要找到一种方法来截获浏览器关闭,并调用metod来更新记录,其中包含有关数据库中已登录用户的一些信息。当用户注销或关闭浏览器时,更新此记录非常重要。显然,当用户单击“注销”时,我会在服务器端事件中处理更新,但如果用户只是从浏览器中退出呢

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

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

您不可能有一个服务器端解决方案来了解客户端浏览器中发生的事情。

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

是的,您可以在Global.AsaX中放置一个事件,该事件将在会话结束时触发。现在,如果您需要来自客户机的数据来更新数据库等,则需要一种方法将其获取,但如果不需要,则
会话结束
就可以了

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

我希望找到一个“服务器端”解决方案,而不使用ajax或 javascript

我怀疑这是不可能的

也许你可以这样做:

  • 在页面上有一个隐藏的IFRAME
  • 在此IFRAME上设置刷新头(或使用
    META
    元素)以每隔几秒钟联系服务器
  • 如果您在一段时间内没有收到客户端的消息,则假定浏览器已关闭

  • 但是,我认为这个解决方案不能很好地扩展。

    您考虑过类似Signal的东西吗?我用它来检测是否有人打开了记录

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

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

    我不同意投票否决这个问题的人的观点。应该鼓励人们提出问题。即使绝对不可能为OP的问题提供答案,我们仍然可以礼貌地说,这可能是一个非常有用的建议。非常感谢你。我试试看。