我已经使用服务器端控件如按钮创建了表单..并且已经在其中编写了事件.. 现在,在点击该按钮后运行时,我通过按F5刷新页面。Page_Load正常执行,但Button1_Click()事件也会触发.. 那么在这种情况下如何停止此事件的执行呢?请给我建议。
我已经使用服务器端控件如按钮创建了表单..并且已经在其中编写了事件.. 现在,在点击该按钮后运行时,我通过按F5刷新页面。Page_Load正常执行,但Button1_Click()事件也会触发.. 那么在这种情况下如何停止此事件的执行呢?请给我建议。
简短回答:不可能
更详细的回答:没有网站可以阻止浏览器的功能,因为这会对浏览器造成严重的安全问题。
<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;
}
这会显示一个提示,询问用户是否要离开当前页面,可能不是想要的。(而且,我不知道支持程度)
你想要阻止的不是页面刷新,而是页面重新POST
。
正如已经说过的那样,客户端无法实现,因为刷新会重放浏览器上次操作的内容。
但是你可以在服务器端捕获它,因为服务器可以保存一些信息来控制请求。
最简单的方法是在Page Load
中将某种RequestID放入隐藏字段中,将其存储在某个地方,例如Session
中。然后在下一个POST
中控制其值以验证请求,然后覆盖它以避免使用相同的RequestID进行重新POST
。
也许还有更好的方法 :)
你的“问题”类似于用户双击恐怖行为:ASP.Net double-click problem
在点击按钮时,您是否需要刷新页面?您能否重新连接按钮,使其发出ajax调用以提交数据?如果可以的话,那么您就不必担心页面在刷新时重新提交。
解决F5刷新问题的唯一方法是使用Response.Redirect
。请查看我在这个主题上的帖子。
我有一些代码,它不允许您按下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>