1

ポストバックを実行し、画面が閉じられたときに画面のデータをセッションに保存する必要があります。これは、onBeforeUnload イベントを使用して、画面に非表示のボタンを配置するためです。on before unload イベントでは、クリック イベントを呼び出してボタン サーバー イベントを呼び出しています。しかし、イベントは発生していません。ここに欠けているものはありますか。

<asp:Button Style="display: none" runat="server" ID="btnHidUpdate" OnClick="btnHidUpdate_Click" />
<script type="text/javascript">
  $(document).ready(function () {
    window.onbeforeunload = updateSessionBeforeUnload; 
  });
</script>

.js ファイル内:

function updateSessionBeforeUnload() {
  var hidUpdate = $('[id$="btnHidUpdate"]')[0];
  hidUpdate.click();
}

.cs コード ビハインド:

protected void btnHidUpdate_Click(object sender, EventArgs e)
{
  UpdateSession();
}
4

4 に答える 4

1

ここでの他の提案はうまくいくはずです。GetPostBackEventReference を使用することをお勧めします。ここで詳細を確認できます: http://msdn.microsoft.com/en-us/library/aa720417(v=vs.71).aspx

于 2012-09-14T21:33:17.553 に答える
1

問題は、ページがボタンのクリックを実行する前に次のページをロードすることです。

Jquery Unload イベントを使用します。

$(function(){
    $(window).unload(function(){
       // put synchronous code here to persist what you need.
    });
});

Yuriy が言うように Ajax イベントを使用できますが、次のように設定asyncする必要があります。false

      $.ajax({
           type: "POST",
           url: "Url/To/Persistance",
           dataType: "json",
           data : { "data" : "to be persisted"},
           async: false
      });

編集 クリックイベントをすべて一緒に回避し、次のようなことを行います:

$(function(){
    $(window).unload(function(event){
       var hidUpdate = $('[id$="btnHidUpdate"]')[0];
       __doPostBack(hidUpdate.attr('id'),'');
    });
});

ただし、ボタンをクリックする必要がある場合は、これを試してください

$(function(){
    $(window).unload(function(event){
       var hidUpdate = $('[id$="btnHidUpdate"]')[0];
       hidUpdate.click()
       alert(
         "Default: " + event.isDefaultPrevented() + "\n" + 
         "ImedPropStopped: " + event.isImmediatePropagationStopped() + "\n" + 
         "PropStopped: " + event.isPropagationStopped()
       );
    });
});

アラートの内容を教えてください。

于 2012-09-13T11:17:13.320 に答える
0

ボタンのクリックイベントを呼び出す jquery trigger("click") 関数を使用できます。

于 2012-09-13T10:32:31.937 に答える
0

私の意見では、問題は、onbeforeunloadユーザーがページを離れたいときに、イベント ハンドラーがユーザーに確認を求めることです。また、updateSessionBeforeUnloadメソッドは質問文字列を返さないため、このメソッドが終了した直後にアンロード プロセスが続行されます。

メソッドを静的にできる場合は、非同期メソッド呼び出しUpdateSessionで非同期に呼び出すことができます。jQuery.ajax

<script type="text/javascript">
     window.onbeforeunload = foobar;

     function foobar() {
          $.ajax({
               type: "POST",
               url: "WebForm2.aspx/UpdateSession",
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               async: true
          });
     }
</script>

[WebMethod]
public static void UpdateSession()
{
}
于 2012-09-13T10:58:30.707 に答える