我正在开发一个asp.net(框架4),如果用户试图离开页面而不保存更改,则需要通知用户。我通过JavaScript调用onbeforeunload
函数找到了解决方案。适用于IE,但不适用于Firefox,Safari或Chrome。
现在问题就出现了。我正在使用AJAX回发,如果在离开页面之前提示用户保存更改,则更新面板内的任何控件都不会回发到服务器。例如,如果按下更新面板内的保存按钮,则不会发生任何事情。
以下是一些代码段
的javascript:
window.onbeforeunload = function (e) {
if (doBeforeUnload() == true) {
var ev = e || window.event;
// For IE and Firefox prior to version 4
if (ev) {
ev.returnValue = "You have modified the data entry fields since the last time it was saved. If you leave this page, " +
"any changes will be lost. To save these changes, click Cancel to return to the page, and then Save the data.";
}
// For Safari
return "You have modified the data entry fields since the last time it was saved. If you leave this page, " +
"any changes will be lost. To save these changes, click Cancel to return to the page, and then Save the data.";
}
}
ASP.NET:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<%--no controls inside of this panel will postback to server if user clicks the “Stay on Page” button--%>
</ContentTemplate>
</asp:UpdatePanel>
似乎网上有很多帖子但没有解决方案。除了不使用异步回发之外的任何想法?
答案 0 :(得分:0)
当我在寻找类似的问题时,我遇到了这个问题。我能够通过以下方式解决这个问题:
var doOnBeforeUnloadCheck = true; // global to set in link button
window.onbeforeunload = function (e) {
if (doOnBeforeUnloadCheck && doBeforeUnload()) {
// do stuff
}
// Make sure to always re-enable check to ensure the event will still trigger
// where not specified to disable event.
doOnBeforeUnloadCheck = true;
}
在LinkButton
中,您只需确保在运行任何其他JavaScript或执行回发之前将全局设置为false:
<asp:LinkButton ID="yourButton" runat="server"
OnClientClick="doOnBeforeUnloadCheck = false;" OnClick="yourButton_Click" />
我在以下链接的帮助下遇到了这个解决方案:
http://www.jimandkatrin.com/CodeBlog/post/LinkButton-UpdatePanel-onbeforeunload.aspx
在我找到答案之前我发现了这个问题,所以如果其他人有同样的问题,这可能会节省一些时间。希望有所帮助。