按F5时阻止页面刷新

时间:2010-11-19 15:55:15

标签: c# asp.net page-refresh

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

9 个答案:

答案 0 :(得分:11)

简答:不可能

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

您可以使用:

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:2)

 <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按钮的位置发布此脚本。

答案 5 :(得分:1)

它不是你想要阻止的页面刷新,它的页面重新POST

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

但是你可以将它捕获到服务器端,因为服务器可以拥有一些信息来控制请求。

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

也许有更好的方法:)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我有一些代码不允许你按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>