if(!this.IsPostBack)
//如果是刷新,则IsPostBack==false
//如果是通过按钮等服务器控件激发的IsPostBack==true
//如果是刷新,则IsPostBack==false
//如果是通过按钮等服务器控件激发的IsPostBack==true
解决方案 »
- repeator 绑定数据怎么没效果 后台代码没有任何问题
- 生成随机数 在一个区间内 不重复。
- 添加不了引用
- 如何让button.click后弹出确认框包含textbox的值?
- asp.net web 怎样动态生成控件呢?
- gridview 动态添加多列,同时页脚添加编辑文本框用以添加新纪录
- 关于服务器控件id的问题,来者有分了
- 在存储过程中如何判断保存在游标里的字符串是否含有以sd开头?
- 错误 1 类型“UDS.Global”不明确: 它可能来自程序集“E:\oaoa\bin\UDS.DLL”或程序集“C:\WINDOWS\Microsoft.N
- 如何将树目录结构添加到DataGrid中?
- 用asp.net(vb)如何连接Access和SQL SERVER数据库的?
- 关于代码共享得问题
如何处理用户按F5刷新?
发现用户按F5,由于页面存在数据库操作,所以会提示什么不重新发送消息页面 无法刷新页面。
更为严重的问题是:
我有两个页面处理订单,第一个页面是下定单,而第二个页面是显示成功下订单后的订单信息
两个页面之间是采用Server.Transfer()的方法来传递信息的。
其中第二个页面的page_load是这样处理的:
if(!IsPostBack)
{
// 在此处放置用户代码以初始化页面
OrderForm1 PrevPage=(OrderForm1)(Context.Handler);
this.OrderMainId=PrevPage.OrderMainId;
ViewState.Add("OrderMainId",this.OrderMainId);
}
else
this.OrderMainId=(int)ViewState["OrderMainId"];然后,就根据取得的OrderMainId来读取信息。
当按F5的时候,不仅出现刚才的情况,更甚的是另外开了一张新的订单!
也就是说页面1的提交事件又执行了一遍!
这是为什么呢?如何解决?
页面再次装载时,都会重新调用page_load(),此时ispostback=true
即使对于问题2可以解释为什么用户按F5会执行if(!IsPostBack)那一段
但是也不能解释为何会返回执行第一个页面的提交按钮的事件啊?
Response.AddHeader("refresh" ,("0;url=" + Request.Url.AbsoluteUri));
是放在Server.Transfer();之前?
为什么asp.net会出现这种情况?
这个东西只会闪一下就跑回第一个页面了
是第一个页面的提交按钮btncommit的onclick事件里面入库,然后就Server.Transfer;
//OrderForm1.aspx.cs
private void Button1_Click(object sender, System.EventArgs e)
{//下定单、数据库操作
...
//转页面2
Server.Transfer("OrderForm2.aspx");
}
如果这样的话就会出现刚才的情况
如果在
//OrderForm1.aspx.cs
private void Button1_Click(object sender, System.EventArgs e)
{//下定单、数据库操作
...
//转页面2
Response.AddHeader("refresh" ,("0;url=" + Request.Url.AbsoluteUri));
Server.Transfer("OrderForm2.aspx");
}
那么就不会显示页面2,只是闪一下就跑回页面1
那么addheader还要不要?
Server.Transfer("OrderForm2.aspx",true);
我现在使用的是
Response.AddHeader("refresh" ,("0;url=" + Request.Url.AbsoluteUri));
Response.Redirect("OrderForm2.aspx");
可以达到我的要求。你说的其他方式我还没有试,明天再试。
另外经过测试发现Page_Load是先执行的,也就是按钮的onclick事件执行之前先执行Page_Load,所以导致问题1的出现。