如何判断ASP中的页面卸载是否为PostBack

这似乎是一个常见的问题,但搜索没有返回任何东西。

我有以下代码在页面卸载之前执行。问题是如果卸载是回发我不想向用户发出警告但我无法弄清楚如何区分回发和用户导航到另一页例如。

// This is executed before the page actually unloads $(window).bind("beforeunload", function () { if (prompt) { //prompt return true; } else { //reset our prompt variable prompt = true; } }) 

在后面的代码中运行脚本,即如果Page.IsPostBack然后设置提示不是一个选项。

有任何想法吗?

编辑:

这是我最终得到的解决方案:

  function DoNotPrompt() { prompt = false; } 

然后我将其添加到用户可以做一些导致回发的控件的所有控件中。

 OnClientClick="DoNotPrompt() 

然后选中了这个标志,如果用户真的离开了页面,那么只返回“beforeunload”中的字符串,即不是回发。

我还必须使用这段代码:var magicInput = document.getElementById(’__ EVENTTARGET’);

  if (magicInput && magicInput.value) { // the page is being posted back by an ASP control prompt = false; } 

原因是我有一个自定义用户控件是一个列表框,我无法添加上述方法。 因此使用它来捕获该事件并将标志设置为false。

不是最优雅的解决方案。

谢谢,迈克尔

这可能不会涵盖所有回发情况,但您可以通过询问__EVENTTARGET隐藏输入来__EVENTTARGET ASP控件是否回发了该页面。

当ASP控件回发页面时,此输入由ASP设置。

 var magicInput = document.getElementById('__EVENTTARGET'); if (magicInput && magicInput.value) { // the page is being posted back by an ASP control } 

您可以捕获提交并将onbeforeunload重置为:

 jQuery(function($) { var form = $('form'), oldSubmit = form[0].onsubmit; form[0].onsubmit = null; $('form').submit(function() { // reset the onbeforeunload window.onbeforeunload = null; // run what actually was on if(oldSubmit) oldSubmit.call(this); }); }); 

这是我的网页上经过测试的代码:)

JavaScript在客户端上运行; 就客户而言,页面不会保持从一个视图到下一个视图的状态。 回发完全是一个ASP.NET概念。

您可以通过在服务器端运行一些代码来解决这个问题,该代码根据Page.IsPostBack是否为true来定义JavaScript变量。

例:

 <%@ Page Language="C#" AutoEventWireup="true" %>    Page.IsPostBack -> client