4

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

4

9 回答 9

11

简短的回答:不可能

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

于 2010-11-19T15:56:56.217 回答
5

欢迎来到web开发,没有办法阻止页面刷新和转发,这完全是浏览器的行为。

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

于 2010-11-19T15:59:55.123 回答
3
 <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 按钮的位置。

于 2012-10-03T05:55:06.837 回答
2

您可能会使用:

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

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

于 2010-11-19T16:21:57.470 回答
2

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

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

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

于 2010-11-19T19:23:59.477 回答
1

您要阻止的并不是真正的页面刷新,而是它的页面重新- POST

如前所述,这在客户端是不可能的,因为刷新将重播浏览器在最后一个操作中所做的事情。

但是您可以在服务器端捕获它,因为服务器可以保存一些信息来控制请求。

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

也许有更好的方法:)

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

于 2010-11-19T16:48:46.993 回答
1

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

于 2010-11-19T17:18:35.160 回答
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>
于 2014-05-31T17:27:27.090 回答
0

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

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

于 2012-10-19T15:09:13.667 回答