通过按钮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>

最佳答案

您可以附加两个事件:beforeunloadunload。顾名思义,beforeunloadunload之前被触发,并有机会在用户许可的情况下取消卸载。您的应用无法强制取消卸载;将向用户显示一个确认对话框,只有当他们选择单击“取消”时,该对话框才会被取消。

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

但是,所有这些实际上都是针对不同的年龄的。现在有了诸如HTML5中的本地存储之类的东西,这是处理保存状态的更好的方法。只需在用户更改字段时将他们的输入添加到本地存储中,并且在加载表单时,尝试将本地存储中的所有值读回到其对应的字段中。这样,如果用户返回,转到另一个页面,甚至完全离开了您的网站,那么当他们返回时,表单仍将具有其先前输入的信息。

关于javascript - 更改浏览器中按下后退按钮的行为以保留在同一站点上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25813676/

10-09 17:00