我已经创建了带有服务器端控件的窗体,例如按钮..还有写入事件的那个.. 现在运行后单击按钮我已按F5刷新页面.Page_load正在执行正常但button1_click()事件也触发......所以如何在这种情况下停止此事件执行。请建议我
答案 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
。请参阅我关于此主题的帖子。
答案 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>