ASP.NET:关闭窗口时出现更改数据的警告

ASP.NET: Warning on changed data closing windows

本文关键字:数据 警告 NET 窗口 ASP      更新时间:2023-09-26

当用户试图关闭浏览器窗口时,如果他们没有保存在web表单中所做的更改,我想警告他们。

我使用的是ASP.NET 3.5(带有ASP.NET Ajax)。

有没有一个我可以轻松实现的通用解决方案?

编辑:也许我的问题不清楚:我正在专门寻找一种在ASP.NET服务器控制方法中优雅集成的方法。

这里有一个ASP.NET扩展程序控件,可以帮助您完成以下操作:

http://www.codeproject.com/KB/ajax/ajaxdirtypanelextender.aspx

希望这能有所帮助。它可能不完全符合你的需求,但它至少向你展示了如何。

您将希望利用

window.onbeforeunload

事件。类似于Gmail,如果你在没有保存合成电子邮件的情况下试图关闭窗口。

这里有一些JS示例。

http://forums.devarticles.com/javascript-development-22/how-to-stop-browser-from-closing-using-javascript-8458.html

只需添加window.onbeforeunload事件。这将显示一个模式窗口,您可以在其中决定停留或离开页面。

window.onbeforeunload = function (event) {
  var message = 'All changes will get lost!';
  if (typeof event == 'undefined') {
    event = window.event;
  }
  if (event) {
    event.returnValue = message;
  }
  return message;
}

所有浏览器都会提供一条标准消息("您确定要离开此页面吗?")以及您的自定义消息。

因此窗口将如下所示:

---------------------------------
| Are you sure you want to      |
| navigate away from this page? |
|                               |
| All changes will get lost!    |
|                               |
|     [Cancel]     [Ok]         |
---------------------------------

您可以创建一个扩展IExtenderProvider的控件,并让它创建JavaScript来跟踪更改(或者更可能使用更改跟踪机制注册控件)。

不过,您仍然需要在Javascript中实现更改跟踪,除非您需要大量的Postback。

我在以前的一位雇主使用Prototype.Js做过这件事。我认为唯一困难的是Internet Explorer和Firefox要求设置"取消导航"标志的方式之间的差异。

正如其他人所提到的,您需要查看window.onunload/obeforeunload事件。此事件的问题在于,每当卸载页面时都会调用它。不仅当浏览器窗口关闭时,而且当您单击同一浏览器窗口中的链接以转到同一网站上的不同页面时。你仍然可以做你想做的事,但如果你能预料到这种行为,这会有所帮助。

在Page_Unload事件(或在body标记<body onunload="onPageUnload();">中调用此函数)上,您可以检查表单中是否有数据。然后您可以运行一些Java:

<script language="text/javascript">
   function onPageUnload() {
        var oConfirm = window.confirm("You have unsaved form data, are you sure you want to close this window?");
        if(oConfirm){
            //Close
        }else{
            //Dont 
        }
    }
</script>

看看你的是如何运作的

编辑:它可能不会阻止窗口的关闭,但它会提醒您的用户,他们在您的表单中有未保存的数据。

确认不适用于跨浏览器,我将调查一个不同的方法并将其发布在这里。