当页面刷新的之后,在刷新前最后被执行的button事件会被执行。怎么能防止button事件的执行。(不是Page_Load的事,Page_Load里什么都不写也一样)
解决方案 »
- 网页程序如何传值调用后台winform的方法?跪求
- TREEVIEW如何判断是否选中节点。。。
- C#windows窗体实现datagridview行数(80分)
- 急求如何在C#.NET中设置权限??
- 在线等,关于RichTextBox的添加一航文字采用不同颜色的问题,richtextbox的bug??,还是我的bug??
- :::C#绘图__高深(需求看贴子)__高分:::
- c#怎么写dll控件啊,通过编译器怎么编译.
- C#写了个发短信的程序 设置短信号码 那怎么写啊! 看下代码!
- 神啊!!!就就我吧
- Remoting 问题消息队列来看
- Date.Parse 时间 format
- ClickOnce发布过程中遇到的问题
那么问题的关键在于:为什么我们刷新一下页面也会再次的执行Button事件呢?这就要理解在刷新的时候我们是以什么方式提交页面的(实际是Post),那么服务器就会得到并会继续的执行Button事件!并不管是否IsPostBack!
通过ieHttpHeaders,我们可以看到第一次请求页面的时候,ViewState什么也没有,当我们执行Button的时候的ViewState是__VIEWSTATE=dDw5NjU1MTU1Ozs%2BqpNxXAVt5su06O7aeRq%2FofRHPlc%3D&Button1=Button
我们刷新页面的时候提交的页面数据是:POST /WebApplication1/WebForm1.aspx HTTP/1.1
Accept: */*
Referer: http://localhost/WebApplication1/WebForm1.aspx
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)
Host: localhost
Content-Length: 77
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASP.NET_SessionId=lq0lprva5203xfv33jw3r155
__VIEWSTATE=dDw5NjU1MTU1Ozs%2BqpNxXAVt5su06O7aeRq%2FofRHPlc%3D&Button1=Button
看,这里还是有Button。
所以事件继续执行!
那么,有没有办法禁止他这样呢?可以用javascript来做到这一点:
用javascript来控制的方法就是截取F5或者刷新按钮。这个时候将form的method改为get而非post。模拟一个新的请求!
{
//重定向本页
}
我现在正找怎样用javascript来控制的方法就是截取F5或者刷新按钮。将form的method改为get而非post。模拟一个新的请求!
在form的属性来直接改: <form id="form1" runat="server" method ="get">没有效果............请大家帮忙!
<script language="javascript">
function window.onbeforeunload() {
if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey)
{
}else {
alert("你在刷新")
}
}
</script>
if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey)
{
}
else
{
alert("你在刷新");
document.form1 .method ="get";
}
}
也不顶用,而且是回传事件就会出发......
{
//重定向本页
}
凭自己的感觉
可能是在刷新前button事件已经执行了
只是你没重新绑定
所以再次刷新页面的时候会把执行结果显示出来
如果是这种情况把button事件自己绑定一次就OK了
楼太多,没看完凭自己的感觉
可能是在刷新前button事件已经执行了
只是你没重新绑定
所以再次刷新页面的时候会把执行结果显示出来
如果是这种情况把button事件自己绑定一次就OK了
弄错了,认真学习...
这样按刷新按钮,右键或者F5都不执行事件里的Code了.
跟重定向页面差不多,有些数据显示不了。我这有篇文章,不过调试老有错误要不就异常。大家看看:本文前面讨论的机制可以预处理请求,并确定是否正在刷新页面。这些信息通过 HttpContext 对象传递给页面处理程序。在页面中,开发人员可以使用以下代码检索这些数据。bool isRefresh = (bool) HttpContext.Current.Items["IsPageRefreshed"];
但更好的做法是,如果使用自定义的、更有针对性的 Page 类,则可以将数据封装到一个更易于使用的属性中,即封装到 IsPageRefresh 属性中。public bool IsPageRefresh {get {object o = HttpContext.Current.Items[RefreshAction.PageRefreshEntry];if (o == null)return false;return (bool) o; }}
通过使 Page 类继承新的、功能更丰富的基础类(本例中为 Msdn.Page),可以通过新属性了解发出请求的真正原因。以下示例显示了如何实现不应在页面刷新时重复的某个关键操作。void AddContactButton_Click(object sender, EventArgs e) {if (!IsPageRefresh)AddContact(FName.Text, LName.Text);BindData();TrackRefreshState();}
仅当在不刷新页面时才添加新联系人,换句话说,仅当用户按照常规方式单击“Add-Contact”(添加联系人)按钮时才会添加联系人。上述代码片断中有一个很奇怪的 TrackRefreshState 方法,它的作用是什么呢?该方法更新票证计数器,并确保新页面响应包含带有最新票证的隐藏字段。在本例中,通过将会话状态中存储的值递增一来获取下一个票证。(这里只是随便使用了会话状态,最好不要使用会话状态,而使用更具扩展性的提供程序模型,就像在 ASP.NET 2.0 中一样。)但是,关于 TrackRefreshState 方法(这是有意命名的,以便于大家回想起更熟悉的 TrackViewState 方法),主要有一点要说明。通过调用该方法,除了可以添加其他信息外,还可以将带有当前请求票证的隐藏字段添加到页面响应中。如果没有隐藏字段(参见图 1),刷新机制将无法检测下一个回发是刷新还是提交。换句话说,通过在回发事件处理程序中调用 TrackRefreshState,使得系统知道您要跟踪该操作(而且只跟踪该操作),以确定是否为页面刷新。这样,您只跟踪可能会出错的页面刷新,而且并不是所有页面刷新都会在会话生命周期内发生。要利用页面刷新功能,只需在 Microsoft Visual Studio .NET 项目中添加一个新页面,然后打开内含代码文件并将页面的基础类更改为 Msdn.Page。接下来,在您执行不应刷新的操作时调用 TrackRefreshState(Msdn.Page 类的新的公共方法)。使用新的布尔属性 IsPageRefresh 检查刷新状态。
http://msdn2.microsoft.com/zh-cn/library/ms379557(VS.80).aspx