调用页面方法在浏览器关闭(Calling a Page Method when the Browse

2019-06-25 06:11发布

嗨这里我想呼吁bodyunload方法[的WebMethod]。

但它是越来越在页面加载本身只解雇。 我要如何预防呢?

下面是我使用的代码:

[WebMethod]
public static void AbandonSession()
{
    HttpContext.Current.Session.Abandon();
}


<script language="javascript" type="text/javascript">
//<![CDATA[

function HandleClose() {
    PageMethods.AbandonSession();
}

//]]>
</script>

<body onunload="HandleClose()">
....
....
....
</body>

谢谢你,纳古

Answer 1:

我曾与下面的代码测试,它工作正常。

在ASPX页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script type="text/javascript">
        //<![CDATA[

        function HandleClose()
        {


            PageMethods.AbandonSession();
        }

        //]]>    
    </script>

</head>
<body onunload="HandleClose()">
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
    </form>
</body>
</html>

在代码隐藏

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;

public partial class ClearSessionOnPageUnload : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    [WebMethod]
    public static void AbandonSession()
    {
        HttpContext.Current.Session.Abandon();
    }

}

您可以在AbandonSession方法把断点来验证这是在卸载击中。



Answer 2:

你所试图做的是一个坏主意。 考虑把会话数据较少,或降低超时。

或许,当用户刷新或导航离开页面,你不知道,onunload的火灾。 因此,假如你的代码的实际工作,如果用户更新他们的网页,然后他们的会话将被终止。 如果他们访问了网站上的任何其他网页的会议也将被终止!

也许不是你所希望看到的功能!



Answer 3:

有没有办法一致地处理这种类型的事件。 有一个会话“结束”了太多的原因。 非常简单的,这些是丢失或关闭的连接。 在这种情况下,任何JavaScript发射了永远不会到达服务器。

即使你能得到这个工作的方式,你想它只是去工作的一部分时间。 如果你不能依靠它自己的时间可能会花和不同的解决方案。



Answer 4:

这是一个几年,但我不知道的WebMethod可以是静态的。



文章来源: Calling a Page Method when the Browser Closes