C# 浏览器关闭时调用页面方法

C# 浏览器关闭时调用页面方法,c#,asp.net,web-services,asmx,pagemethods,C#,Asp.net,Web Services,Asmx,Pagemethods,大家好,我正在尝试调用bodyunload方法上的[webmethod] 但它只是在页面加载本身时被解雇。我如何预防它 以下是我正在使用的代码: [WebMethod] public static void AbandonSession() { HttpContext.Current.Session.Abandon(); } <script language="javascript" type="text/javascript"> //<![CDATA[ func

大家好,我正在尝试调用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>
[WebMethod]
公共静态会话()
{
HttpContext.Current.Session.about();
}
//
....
....
....
谢谢,,
纳古

你试图做的是个坏主意。考虑在会话中减少数据,或者降低超时。

也许您没有意识到,当用户刷新或离开页面时,onunload会触发。所以假设您的代码实际工作,如果您的用户刷新了他们的页面,那么他们的会话将终止。如果他们访问了网站上的任何其他页面,他们的会话也将被终止


可能不是您希望的功能

你想做的是个坏主意。考虑在会话中减少数据,或者降低超时。

也许您没有意识到,当用户刷新或离开页面时,onunload会触发。所以假设您的代码实际工作,如果您的用户刷新了他们的页面,那么他们的会话将终止。如果他们访问了网站上的任何其他页面,他们的会话也将被终止


可能不是您希望的功能

无法始终如一地处理此类事件。会话“结束”的原因太多。其中最简单的是丢失或关闭的连接。在这种情况下,任何被触发的JavaScript都不会到达服务器


即使你能让它按你想要的方式工作,它也只能在部分时间内工作。如果你不能依赖它,你的时间可能会被浪费掉,你需要一个不同的解决方案。

没有办法始终如一地处理这类事件。会话“结束”的原因太多。其中最简单的是丢失或关闭的连接。在这种情况下,任何被触发的JavaScript都不会到达服务器


即使你能让它按你想要的方式工作,它也只能在部分时间内工作。如果你不能依赖它,那么你的时间可能会被浪费掉,并且会有一个不同的解决方案。

已经有几年了,但我不知道WebMethod可以是静态的。

已经有几年了,但我不知道WebMethod可以是静态的。

我已经用下面的代码进行了测试,它运行良好

在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>

您可以将断点放在放弃会话方法上,以验证它是否在卸载时被命中。

我已经用下面的代码进行了测试,它工作正常

在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>

您可以将断点放在放弃会话方法上,以验证它是否在卸载时被命中。

您可以发布一些代码来说明发生了什么吗?太好了。现在是什么让你认为webmethod正在被调用,HandleClose正在被调用?你能发布一些代码来说明发生了什么吗?很好。现在是什么让你认为webmethod正在被调用,HandleClose正在被调用?@Leppie-static还可以。这实际上是一个页面方法,而不是Web服务。这只是向MS AJAX公开功能的一种方式。@Leppie-您可以在这里阅读有关它们的内容。希望它有用。@Leppie-static可以。这实际上是一个页面方法,而不是Web服务。这只是向MS AJAX公开功能的一种方式。@Leppie-您可以在这里阅读有关它们的内容。希望它有用。