您现在的位置: 365建站网 > 365文章 > EasyTools---CheckRepost控件(防止重复提交控件)

EasyTools---CheckRepost控件(防止重复提交控件)

文章来源:365jz.com     点击数:274    更新时间:2009-09-15 10:09   参与评论
您是否遇过这样的问题?无缘无故的在数据库出现了两条一样的数据。如果有遇过的话,你觉得是什么原因导致的呢?在这里我告诉你一个这样的场景,相信你也有过这样的经验:用户点击一个提交按钮,此时页面由于网络或服务器繁忙原因,导致响应不过来用户的请求。这时在用户看到的这样一翻情景,点击了没反映,心急点的用户可能会狂点,这样,如果数据库或服务端没有好锁的控制时,就会导致插入两条数据。

那么解决方案该怎么做呢?一般的做法是通过验证码,但验证码要用户输入数据,用户体验不好。但根据这个原理,我们可以做稍微的改造,就能达到目的,下面是我的做法:

首先在页面加载的时候,生成一个随机数,并保存在session里面,同时赋值给一个hidden控件。代码如下:

 1         protected override void OnInit(EventArgs e)
 2         {
 3             
 4             if (Page.IsPostBack)
 5             {
 6                 if (hc.Session[SessionKey] != null)
 7                 {
 8                     isrepost = !hc.Session[SessionKey].Equals(MyConvert.PToInt32(this.ClientID, 0));
 9                 }
10             }
11             Random rd = new Random();
12             hc.Session[SessionKey] = rd.Next(999999);
13         }

上面的代码生成随机数,保存Session,然后在Render事件里面赋值。

1        protected override void Render(HtmlTextWriter output)
2        {
3            this.Value = hc.Session[SessionKey].ToString();
4            base.Render(output);
5        }

这样控件就完成了。
本控件继承了HiddenField控件。
这个控件有两个自定义属性:SessionKey:控件session的键值;IsRepost:布尔型,true为重复提交了,反之正常操作。

控件拖到界面后调用也很方便。
1     protected void Button1_Click(object sender, EventArgs e)
2     {
3         if (CheckRepost1.IsRepost)
4         {
5             Response.Write("<b>您太心急啦,连续点击了两次按钮,造成重复提交!^_^</b><br>");
6         }
7         System.Threading.Thread.Sleep(4000);
8     }

下面附上在线的EasyTools----CheckRepost使用例子  演示    下载例子    下载EasyTools.dll
Tag标签: 控件,EasyTools

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (274人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号