防止按钮多次提交的办法

//方法一:必需要是Asp.net服务器控件。(注意UseSubmitBehavior属性)
<asp:Button ID="btnSumbit" runat="server" UseSubmitBehavior="false"
OnClientClick="this.value='正在提交';this.disabled=true; "
Text="提交" OnClick="btnSumbit_Click" />

注意:1. UseSubmitBehavior="false"  需要设置成false

            2. Button不能有ValidationGroup属性,否则,postback到服务器端,将不会触发button的服务器端事件

 // 在提交前增加提示

<asp:Button ID="Button1" runat="server" UseSubmitBehavior="false" OnClientClick="if (!confirm('提示')) return false;this.value='正在处理……';this.disabled=true; " Text=" 提交 " OnClick="Button1_Click" />

//方法二

当遇上Validator控件

 <script type="text/javascript">
     function disableButton(button)
     {
         if (typeof (Page_ClientValidate) == 'function' && Page_ClientValidate() == false)
         {
             return false;
         }
         button.disabled = true;
         return true;
     }
 </script>
 
 <div>
     <asp:TextBox runat="server" ID="tbxInput1"></asp:TextBox>
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbxInput1"
             ValidationGroup="Group1" ErrorMessage="*"></asp:RequiredFieldValidator>
     <asp:Button runat="server" ID="btnPostBack1" Text="按我1" UseSubmitBehavior="false"
             OnClientClick="disableButton(this);" OnClick="btnPostBack_Click">
         </asp:Button>
 </div>


//方法三 
  protected void Page_Load(object sender, EventArgs e)

    {
            //.net1.1
            Button1.Attributes.Add("onclick", "this.disabled=true;" + this.GetPostBackEventReference(this.Button1));

            //.net 2.0以上
        Button1.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button1, ""));

 

          // 在提交前增加提示

 Button2.Attributes.Add("onclick", "if (!confirm('提示')) return false;this.value= '处理中…… ';this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button2, ""));

    }

 

//终极绝杀技

 <script type="text/javascript">
         var date = new Array();
         function disableButton(button, validateGroup)
         {
             date.push(new Date());
             if (date.length > 1
                 && (date[date.length - 1].getTime() - date[date.length - 2].getTime() < 1000))//小于1秒则认为重复提交
             {
                 event.cancelBubble = true; //测试时发现,如果直接单独设置cancelBubble、或者returnValue来取消事件,经常取消不了,依然存在重复提交的可能。因此只好用返回值来实现手工控制!
                 return false;
             }
             if (typeof (Page_ClientValidate) == 'function'
                 && ((validateGroup == undefined && Page_ClientValidate() == false)
                         || (validateGroup != undefined && Page_ClientValidate(validateGroup) == false)))
             { //如果指定了ValidateGroup,则只验证改组;如果未指定,则验证全部验证控件
                 return false;
             }
 
             button.disabled = true;
             return true;
         }
 </script>

 

<asp:Button runat="server" ID="btnPostBack1" Text="按我1" UseSubmitBehavior="false"
           ValidationGroup="Group1" OnClientClick="if(!disableButton(this, 'Group1')) return false;" OnClick="btnPostBack_Click">

 <asp:Button runat="server" ID="btnPostBack2" Text="按我2" UseSubmitBehavior="false"
          OnClientClick="if(!disableButton(this)) return false;" OnClick="btnPostBack_Click">

PS:disableButton接收一个validateGroup参数,如果指定了ValidateGroup,则只验证改组;如果未指定,则验证全部验证控件

 

 

 

/// 图片按钮ImageButton防止多次提交

由于ImageButton没有UseSubmitBehavior的属性,所以

  function Submit(source) {
            Page_ClientValidate();
            if (Page_IsValid) {
                source.disabled = true;
                __doPostBack(source.name, '');
            }
            return Page_IsValid;
        }

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Source/images/btsend.jpg"
                        OnClick="ImageButton1_Click" ToolTip="送出" OnClientClick="javascript:Submit(this);" />

posted on 2012-06-24 15:26  green0818  阅读(246)  评论(0编辑  收藏  举报

导航