按钮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>
答案 0 :(得分:2)
您可以附加两个事件:beforeunload
或unload
。顾名思义,beforeunload
在unload
之前被触发,并允许在用户的许可下取消卸载。您的应用无法强制取消卸载;将向用户显示确认对话框,并且仅当他们选择单击&#34;取消&#34;时,才会取消。
因此,要回答部分问题,不,您不能强迫用户留在页面上。如果他们想要回去,最终他们将被允许回去。你能做的最多就是礼貌地要求他们留在页面上。但是,您可以利用这些事件中的任何一个发出同步 AJAX请求来执行诸如保存表单状态之类的操作。 &#34;同步&#34;部分是关键。如果您使用传统的异步AJAX,浏览器不会等待响应,并会在AJAX完成之前卸载页面。
然而,所有这些都是针对不同年龄的。现在有了像HTML5中的本地存储这样的东西,这是处理保存状态的更好方法。只需在用户更改字段时将用户输入添加到本地存储,当表单加载时,尝试将本地存储中的任何值读回相应的字段。这样,如果用户返回,转到另一个页面,甚至完全离开您的网站,表单在返回时仍会保留其先前输入的信息。
答案 1 :(得分:0)
如评论中所述,您无法禁用后退按钮。想象一下,什么样的网站可以用这种力量做些什么。如果您不想使用Chris Pratt提到的beforeunload
路线,另一种选择是在新页面中打开您的表单;这样,它的历史记录中没有任何内容可以返回,因此后退按钮将被禁用。