繁体   English   中英

按F5时阻止页面刷新

[英]Prevent page refresh on pressing F5

我已经创建了带有服务器端控件的窗体,如按钮..还有写入事件。现在运行时点击按钮后我按F5刷新页面.Page_load正在执行正常但button1_click()事件也触发..那么我怎么能在这种情况下停止这个事件的执行。请给我建议

简答:不可能

更长的答案:没有网站可以阻止浏览器的功能,因为这将是浏览器的严重安全问题。

欢迎使用web开发,没有办法阻止页面刷新和重新发布,这完全是一种浏览器行为。

虽然有工作; 您可以做的一件简单事情是在处理按钮单击后,您可以将浏览器重定向页面,以便刷新不包括按下按钮的重新发布。 显然,这可能需要一些其他的状态管理系统(而不是视图状态),也许你可以将你的状态存储在Session中。

 <script type="text/javascript" language="javascript">
    function checkKeyCode(evt)// for F5 disable
    {

        var evt = (evt) ? evt : ((event) ? event : null);
        var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if (event.keyCode == 116)//disable F5
        {
            evt.keyCode = 0;
            return false
        }
        if (event.keyCode == 123) {
            evt.keyCode = 0;
            return false
        }
        if (event.keyCode == 93) {
            evt.keyCode = 0;
            return false
        }
        if (event.altKey == true && event.keyCode == 115) //disable alt-F4
        {
            evt.keyCode = 0;
            return false
        }



        //alert(event.keyCode);
    }

    document.onkeydown = checkKeyCode;

</script>

在您的母版页上或您想要阻止F5按钮的位置发布此脚本。

您可以使用:

window.onbeforeunload = function ()
{
    return false;
}

这将显示一个提示,询问用户是否要离开并且可能不需要。 (另外,我不知道支持的程度)

海报使用的是ASP.NET WebForms。 在MVC中,使用Post-Redirect-Get模式,这不会是一个问题。

但是自2004年以来,Webforms已经解决了这个问题(甚至在此之前 - 我在2001年写了一个简单的票证解决方案): http//msdn.microsoft.com/en-us/library/ms379557.aspx

基本上,作者创建与每个请求关联的唯一票证,并在第一次回发时删除票证的有效性。 任何意外(或恶意)后续回发都将被忽略。 它包含在基页中,因此很容易添加到任何Webforms解决方案中。

它是要阻止没有真正刷新页面,其页面重新POST

如前所述,在客户端无法实现,因为刷新将重放浏览器在上一次操作中所执行的操作。

但是您可以将其捕获到服务器端,因为服务器可以容纳一些信息来控制请求。

最简单的方法是在Page Load的隐藏字段中放置一种RequestID ,将其存储在Session 并在下一个POST上控制其值以使请求有效,然后覆盖它以避免使用相同的RequestID重新POST

也许有更好的方法:)

您的“问题”类似于用户双击恐怖行为: ASP.Net双击问题

您是否必须点击按钮刷新页面? 您是否可以重新连接按钮以进行ajax调用以提交数据? 如果是这样,那么您不必担心刷新时页面重新提交。

F5刷新问题的唯一解决方案是Response.Redirect 请参阅我关于此主题的帖子。

https://stackoverflow.com/questions/12596152/asp-net-f5-browser-refresh-duplicate-record/12596153#12596153

我得到了一些不允许你按F5和/或Ctrl + R的代码:

<!DOCTYPE html>
<html>
<head>
<title>
Key code test!
</title>
<script type="text/javascript">
var x, ctrlKeyPressed = false;  
function keyDown(e){            
x = e.charCode || e.keyCode;
document.getElementById("key").innerHTML = x;
if(x == 17) {
ctrlKeyPressed = true;
}
if(ctrlKeyPressed && x == 82) {
e.preventDefault();
} else if(x == 116) {
e.preventDefault();
}
}
function keyUp(e) {
x = e.charCode || e.keyCode;
if(x == 17) {
ctrlKeyPressed = false;
}
}
window.onload = function () {
document.onkeydown = function (e) {
keyDown(e);
};
document.onkeyup = function (e) {
keyUp(e);
};
}
</script>
</head>
<body>
Press a key!
<br/>
Key code: <div style="display:inline;" id="key">Nothing</div>
</body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM