Asp.net mvc 3 mvc3检测网站(应用程序)正在关闭

Asp.net mvc 3 mvc3检测网站(应用程序)正在关闭,asp.net-mvc-3,window,Asp.net Mvc 3,Window,我正在用mvc3构建一个网站,我只需要在应用程序关闭时删除数据库中的数据。(用户单击红色的x) 我尝试使用onbeforeunload事件使用javascript,但每次我进入应用程序中的新页面时都会发生此事件 是否可以检测用户何时关闭窗口 早上好,您可以尝试在Session\u End方法中将逻辑添加到global.asax文件中,以删除数据库中的记录。这是不可能的。但是,您可以做的是使用一个小的javascript块,它将每n分钟/秒进行一次ajax调用,告诉服务器用户仍然打开了浏览器 通过

我正在用mvc3构建一个网站,我只需要在应用程序关闭时删除数据库中的数据。(用户单击红色的x)

我尝试使用onbeforeunload事件使用javascript,但每次我进入应用程序中的新页面时都会发生此事件


是否可以检测用户何时关闭窗口

早上好,您可以尝试在Session\u End方法中将逻辑添加到global.asax文件中,以删除数据库中的记录。

这是不可能的。但是,您可以做的是使用一个小的javascript块,它将每n分钟/秒进行一次ajax调用,告诉服务器用户仍然打开了浏览器

通过这种方式,您可以设置一个超时,表示如果5分钟后我们没有收到用户的消息,我们可以删除数据库中的数据(或者您需要执行的任何操作)

要实现超时逻辑,有两个选项:

  • 您有一个单独的服务(控制台应用程序或windows服务)以一定的时间间隔运行,检查是否有任何用户的超时大于某个值。如果是,则执行您需要的任何操作

  • 如果任何用户执行的操作可能已被阻止,则首先检查是否有任何用户仍将其激活(超时值大于当前时间)。如果有,则阻止用户,如果没有,则可以删除旧的超时值,因为它已过期


  • 在window.unload事件中使用同步ajax请求

    当用户转到其他页面、关闭或刷新时,将触发此事件。您可以调用web应用程序上的服务,通知它用户不再编辑文档

    在快速搜索之后,我看到了这个片段


    这是可以做到的,但我不知道怎么做(不是JS专家)。然而,我以前在网页上见过这种行为。但是,请确保应用程序逻辑不依赖于行为。如果浏览器崩溃或者用户在会话超时后才离开会发生什么?好吧,我想我还需要做一些工作,因为在我的网站上,两个用户可以看到同一个文档,第一个用户可以编辑它,但第二个用户只能阅读该文档。因此,我在数据库中添加了文档的id,当第二个用户打开文档时,我检查它是否在数据库中(表示它正在使用)。因此,当第一个用户退出网站时,我需要删除数据库中的引用,以便其他用户也可以编辑它:我已尝试将我的逻辑放入global.asax Application_End()中,但在我关闭应用程序时没有发生任何事情,但会话_End正在工作请注意,虽然会话在用户关闭浏览器时没有结束,但在达到会话超时时会结束。这可能会起作用,但你必须将其更改为仅在浏览器关闭时检测,而不是在他们转到其他页面或刷新时检测,因为OP说他不希望这样。是的,我只需要在窗口关闭时检测,而不是在我转到其他页面时检测。谢谢,这将帮助我摆脱困境^^
    $(window).unload(function() {
        $.ajax({
            url: 'resetTheDocument?id=whatever',
            async: false,
            cache: false,
            type: "POST",
            data: "My work here is done"
        });
    });