改变浏览器中按下的后退按钮上的行为以保持在同一站点上

时间:2014-09-12 17:26:56

标签: javascript asp.net-mvc razor

按钮POST Edit提交后,我在视图中有一个表单。如果用户点击浏览器中的后退按钮,我希望此表单可以被提交或者不会发生任何事情(保持在同一页面上)。

问题:我可以更改Edit.cshtml视图后退按钮的行为,使其无效吗?我的意思是留在同一页上?

在Razor视图中尝试过此操作。没有结果,没有弹出窗口,没有:

<script>
    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;
    }
</script>

2 个答案:

答案 0 :(得分:2)

您可以附加两个事件:beforeunloadunload。顾名思义,beforeunloadunload之前被触发,并允许在用户的许可下取消卸载。您的应用无法强制取消卸载;将向用户显示确认对话框,并且仅当他们选择单击&#34;取消&#34;时,才会取消。

因此,要回答部分问题,不,您不能强迫用户留在页面上。如果他们想要回去,最终他们将被允许回去。你能做的最多就是礼貌地要求他们留在页面上。但是,您可以利用这些事件中的任何一个发出同步 AJAX请求来执行诸如保存表单状态之类的操作。 &#34;同步&#34;部分是关键。如果您使用传统的异步AJAX,浏览器不会等待响应,并会在AJAX完成之前卸载页面。

然而,所有这些都是针对不同年龄的。现在有了像HTML5中的本地存储这样的东西,这是处理保存状态的更好方法。只需在用户更改字段时将用户输入添加到本地存储,当表单加载时,尝试将本地存储中的任何值读回相应的字段。这样,如果用户返回,转到另一个页面,甚至完全离开您的网站,表单在返回时仍会保留其先前输入的信息。

答案 1 :(得分:0)

如评论中所述,您无法禁用后退按钮。想象一下,什么样的网站可以用这种力量做些什么。如果您不想使用Chris Pratt提到的beforeunload路线,另一种选择是在新页面中打开您的表单;这样,它的历史记录中没有任何内容可以返回,因此后退按钮将被禁用。