2009-07-07 21 views
0

こんにちは、ここで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> 

ありがとう、 Naguの

+0

コードを表示してください。 –

+0

何が起こっているかを説明するコードを投稿できますか? –

+0

WebMethodが呼び出され、HandleCloseが呼ばれていると思いますか? –

答えて

3

私は以下のコードでテストしており、正常に動作しています。

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メソッドにブレークポイントを置くことができます。

1

は、ここで私が使用していたコードです。セッションに必要なデータを少なくするか、タイムアウトを小さくすることを検討してください。

おそらく、ユーザーがページをリフレッシュまたはナビゲートするときにonunloadが発生することを認識していない可能性があります。あなたのコードが実際に働いていると仮定して、ユーザーがページをリフレッシュすると、セッションは終了します。彼らがサイト上の他のページを訪問した場合、彼らのセッションも終了します!

おそらくあなたが望んでいた機能性はありませんでした。

0

この種のイベントを一貫して処理する方法はありません。セッションが「終了」する原因は多すぎます。これらの中で最も単純なものは、紛失した、または閉じた接続です。この場合、起動されたJavaScriptは決してサーバーに到達しません。

あなたが望むようにこれを得ることができたとしても、それは時間の一部を働かせるだけです。あなたがそれに頼ることができない場合、あなたの時間は費やされ、別の解決策になるかもしれません。

0

これは数年経っていますが、私はWebMethodが静的である可能性があることを知りませんでした。

+0

@ Leppie- staticはOKです。これは実際にWebサービスではなくページメソッドです。 MS AJAXに機能を公開する方法です。 – RichardOD

+0

@ Leppie-ここでそれらについて読むことができます。http://msdn.microsoft.com/en-us/magazine/cc163480.aspx#S5それが役に立つと願っています。 – RichardOD