防止按F5上的页面刷新

问题描述:

我已经创建与服务器端控件像按钮的形式..并且也有写的事件.. 现在运行时后,点击按钮我刷新了按F5.Page_load页正在执行罚款的button1_Click()事件也烧成...所以,我怎么能停在这scenario.Please此事件执行建议我防止按F5上的页面刷新

+0

我没有Web程序员,但我给它一个尝试,以集思广益。这不是一个关于回传或类似的故事吗?它会工作,如果你确认它是否是一个回发等? – 2010-11-19 15:59:16

答案很简单:不可能

再回应:没有网站可以阻止浏览器的功能因为这对浏览器来说是一个严重的安全问题。

+0

嗨......乔尔......当我保存一条记录时,很安全......我在同一页面显示一条成功消息。如果irefresh页(ctrl + F5)或F5..one更多的记录正在插入。所以,插入相同的细节tworecords。我需要防止插入重复记录。 – 2010-11-19 16:00:23

+1

围绕该用例的解决方法是发布到不同的URL,进程,然后重定向回第一页,在查询字符串中显示成功或错误消息。不幸的是,ASP.NET的post-back模型使得这几乎不可能。您成功处理到“谢谢”样式页面(与第一页完全分离)后,您所能做的就是重定向。这样,如果用户刷新它,它将不会重新提交。实质上,您不得以与发起该行动的帖子相同的回应显示结果。 – 2010-11-19 17:03:19

+1

另外,对幂等性做一些研究。你需要使你的行为幂等:-) http://en.wikipedia.org/wiki/Idempotent – 2010-11-19 17:04:33

欢迎来到网站开发,没有办法阻止网页刷新和重新发布,这完全是浏览器行为。

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

您可能使用:

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

这将显示一个提示,询问用户是否要浏览路程,可能不期望。 (另外,我不知道支持的程度)

它不是真正的页面刷新,你想阻止,其页面重新编号为POST

如前所述,在客户端无法实现,因为刷新会重播浏览器在最后一个操作中所做的操作。

但是你可以把它放在服务器端,因为服务器可以容纳一些信息来控制请求。

最简单的方法是把一个排序在一个隐藏字段的requestIdPage Load,一些地方保存它像Session。并控制它的值在下一个POST有效的请求,然后覆盖它,以避免重新POST请求ID

也许有一个更好的办法:)

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

你有刷新按钮的点击的页面?你可以重新连接按钮来进行Ajax调用来提交数据吗?如果是这样,那么你就不必担心刷新页面重新提交。

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

不过,这已经自2004年解决了Web表单(甚至在这之前 - 我在2001年写了一个简单的车票溶液)的这篇文章:http://msdn.microsoft.com/en-us/library/ms379557.aspx

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

<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按钮的位置。

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

https://*.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>