防止重复提交
当用户不慎操作时,容易重复提交,可能会引起数据的重新操作.通常引发重复提交有两种情况,一是按刷新键(F5或工具栏中刷新键)或是页面右键菜单中的刷新项.第二中情况是提交数据后退,再前进.
对于第一种情况可以在页面加个隐藏域(即隐藏框<input type=hidden>),每次提交前,给这个隐藏域赋上一个随机值,这样每次提交这个字段都是不同的.
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
在服务端,用Session保存这个字段的值.通常过判断Session值和传过来值比较,如果相同则提示重复提交.最后把传过来值保存在Session中,以下用于下次比较.服务端如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1 bool isRepSubmit = false;
2 if(!IsPostBack) //第一次加载时设置Session为空
3 Session["hfd"]=null;
4 string rand = Request.Form["hfd"];
5 if (Session["hfd"] != null && Session["hfd"].ToString() == rand)
6 {
7 isRepSubmit = true;
//提示重复提交
8 }
9 else
10 Session["hfd"] = rand;
对于第二种情况可以可以采用网页过期的办法,如下:
在Page_Load中加入.
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1 Response.Buffer=true;
2 Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);
3 Response.Expires=0;
4 Response.CacheControl="no-cache";