1

当屏幕关闭时,我需要进行回发并将屏幕中的数据保存到会话中,为此我使用 onBeforeUnload 事件,并在屏幕中放置了一个隐藏按钮。在 on before unload 事件中,我调用 click 事件来调用按钮服务器事件。但事件没有触发。有什么我在这里想念的吗。

<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

问题是页面在执行按钮单击之前加载了下一页。

使用 Jquery Unload 事件,例如

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

你可以像 Yuriy 所说的那样使用 Ajax 事件,但是你必须asyncfalse这样设置:

      $.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 回答
1

我认为这里的其他建议应该可以正常工作。我有另一个你可以尝试的建议,那就是使用 GetPostBackEventReference。您可以在此处查看有关它的详细信息:http: //msdn.microsoft.com/en-us/library/aa720417 (v=vs.71).aspx

于 2012-09-14T21:33:17.553 回答
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 回答