如果用户没有保存他们在网络表单中所做的更改,我想在他们尝试关闭浏览器窗口时警告他们。
我正在使用 ASP.NET 3.5(带有 ASP.NET Ajax)。
有没有我可以轻松实施的通用解决方案?
编辑:也许我的问题不清楚:我专门寻找一种优雅地集成到ASP.NET服务器控制方法中的方法。
如果用户没有保存他们在网络表单中所做的更改,我想在他们尝试关闭浏览器窗口时警告他们。
我正在使用 ASP.NET 3.5(带有 ASP.NET Ajax)。
有没有我可以轻松实施的通用解决方案?
编辑:也许我的问题不清楚:我专门寻找一种优雅地集成到ASP.NET服务器控制方法中的方法。
你会想要利用
window.onbeforeunload
事件。如果您在未保存撰写的电子邮件时尝试关闭窗口,则与 Gmail 类似。
这里有一些示例 JS。
这是一个 ASP.NET 扩展器控件,可以帮助您解决此问题:
http://www.codeproject.com/KB/ajax/ajaxdirtypanelextender.aspx
希望这可以帮助。它可能不完全符合您的需求,但它至少向您展示了如何。
只需添加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 中实现更改跟踪。
我在以前的雇主那里使用Prototype.Js做到了这一点。我认为唯一困难的是 Internet Explorer 和 Firefox 需要设置“取消导航”标志的方式之间的区别。
在 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>
看看这对你有什么影响
编辑:它可能不会阻止关闭窗口,但它会提醒您的用户他们在您的表单中有未保存的数据。
确认不能跨浏览器工作,我将研究一种不同的方法并将其发布在这里。
正如其他人所提到的,您需要查看 window.onunload/onbeforeunload 事件。这个事件的问题是每当页面被卸载时它都会被调用。不仅在浏览器窗口关闭时,而且当您单击同一浏览器窗口中的链接以转到同一站点上的不同页面时。你仍然可以做你想做的事,但如果你能预料到这种行为,它会有所帮助。