【ASP.NET】防止ASP.NET按钮多次提交的办法

RTRT.

 

http://www.cnblogs.com/xujh/archive/2008/07/17/1245565.html

 

 

网上查了很多方法,都不太好使,不如自己写一个,思路就是把按钮按下时用Javascript在客户端把按钮下一次的onclick事件改为return false; 这样在服务器端页面重新送回客户端之前,再次点击按钮都不会Post到服务端。同时将按钮的style改为一行字的样子,光标也变成沙漏状。当服务端页面重新产生后Button又会回到初始状态。该方法对于F5刷新还不能防范,只是简单封闭了F5的按键,为了防止刷新时再次提交可以在页面返回前将一些TextBox控件清空,这样就可以判断如果该TextBox为空则不再进行后续操作(如写库)。 或是后台操作成功后跳转到另一个页面以防止恶意刷新。主要是考虑在企业内网使用,不是为了防黑客,所以不是非常严格。

 1 < html  xmlns ="http://www.w3.org/1999/xhtml" >
 2 < head  runat ="server" >
 3      < title > 禁止多次提交网页测试 </ title >
 4      < style  type ="text/css" >
 5    .disable
 6    {
 7        border-style:none; 
 8        border-width: thin; 
 9        background-color:Transparent; 
10        color: #CCCCCC; 
11        cursor:wait;
12    }

13    
</ style >
14      < script  type ="text/javascript"  language ="javascript" >
15    function DisableButton()
16    {
17        document.getElementById("Button2").className  = "disable";
18        document.getElementById("Button2").value = '正在提交.';
19        document.getElementById("Button2").onclick=Function("return false;");
20        return true;
21    }

22    document.onkeydown=mykeydown;   
23    function   mykeydown()
24    {   
25        if(event.keyCode==116//屏蔽F5刷新键   
26        {   
27            window.event.keyCode=0;   
28            return   false;   
29        }
   
30    }
   
31    
</ script >
32
33 </ head >
34 < body >
35      < form  id ="form1"  runat ="server" >
36      < div >
37         输入一些内容 < asp:TextBox  ID ="TextBox1"  runat ="server" ></ asp:TextBox >
38          < br  />
39          < asp:ListBox  ID ="ListBox1"  runat ="server"  Height ="77px"  Width ="332px" >
40      </ asp:ListBox >< br  />
41          < asp:Button  ID ="Button2"  runat ="server"  Text ="OK"  Width ="77px"
42             onclick ="Button2_Click"   />
43      </ div >
44     
45      </ form >
46 </ body >
47 </ html >
48


服务器端代码,故意让其延时等待3秒后再输入,以模拟数据库操作等慢速动作。

 1 public   partial   class  Default2 : System.Web.UI.Page
 2 {
 3    static public int count = 0;
 4    protected void Page_Load(object sender, EventArgs e)
 5    {
 6        if (!IsPostBack)
 7        {
 8            Button2.Attributes.Add("onclick""return DisableButton();");
 9        }

10    }

11
12    protected void Button2_Click(object sender, EventArgs e)
13    {
14        if (TextBox1.Text != string.Empty)
15        {
16            System.Threading.Thread.Sleep(3000);
17            count++;
18            ListBox1.Items.Add(new ListItem("Hello "+TextBox1.Text + "  这是你第" + count.ToString() + "次点击   " + DateTime.Now.ToString()));
19            TextBox1.Text = "";
20        }

21    }

22}


感谢网友大李的建议,<asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false" OnClientClick="this.value='Sumbit';this.disabled=true; " Text="Sumbit" OnClick="btnSumbit_Click" />
这个方法比我的更好更简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值