日期:2014-05-19  浏览次数:20473 次

防止asp:button多次提交
由于涉及到数据库更新,有时会有较长的停顿时间,不明就里的用户会多次click。
如何防止。
看到1.javascipt,让那个控件disabled=true,然后submit--〉他不执行button的onlick事件了
2.button的onlick事件里button.Enabled=false--> 这是c/s的写法。
3.也曾看到某人推荐的http://www.codeproject.com/aspnet/ClickOnce_Button_Control.asp,但这个似乎改动面太大了。

有谁能够提出经济且有效的做法

------解决方案--------------------
对button添加客户端的onclick()事件,事件中首先将按钮enabled=false,然后再执行服务器事件
------解决方案--------------------
<asp:Button ID= "Button1 " runat= "server " Text= "Button " OnClick= "Button1_Click " OnClientClick= "this.onclick=function(){return false;} " />
------解决方案--------------------
方法1:
用Session或者ViewState等变量记录点击次数,实现只点击一次
方法2:
因为你最终是数据库操作
所以通过数据库里主键的控制来 不重复!
------解决方案--------------------
iD=Request.QueryString[ "ID "].ToString();
string sKey=Request.UserHostAddress.ToString()+ "| "+iD;
string sFlag=Convert.ToString(Cache[sKey]);
if(sFlag==null||sFlag==String.Empty)
{
TimeSpan SessTimeOut=new TimeSpan(0,0,Session.Timeout,0,0);
Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session[ "sFlag "]=sKey;

if(IsSetTicket())
Message.Text= "感谢您的支持!投票已成功! ";
else
Message.Text= "投票出错! ";
}
else
{
Message.Text= "请不要重复投票! ";
}