老问题了:现在有一个提交表单,为了防止重复提交,要在鼠标点击“提交”按钮后将“提交”按钮设为不可用状态,enabled=false。问题的关键是,这个按钮是服务器端控件,而且已经有onclick后台事件了!经多方查找搜索无果,查到的都是input类型的html控件解决办法,无奈只能掏分以求正解,还望诸位高手不吝赐教!

解决方案 »

  1.   

    asp.net 2.0<asp:button id="x" runat="server" OnClientClick="this.disabled=true;document.post.submit();" />asp.net 1.x<asp:button id="x" runat="server" />
    x.Attributes["onclick"] = "this.disabled=true;document.post.submit();";
      

  2.   

    在后台代码里面将VISBILE设置为FALSE
      

  3.   

    看了1楼的,看来搞这个不学一下javascript是不行了哎。
      

  4.   

    javascript不太理想,目前可以把它激活起来。
    有条件的话插入时验证是否存在相同的值
      

  5.   

    经多方查找搜索无果,查到的都是input类型的html控件解决办法,无奈只能掏分以求正解,还望诸位高手不吝赐教!
    =======================================================================
    既然知道客户端解决方法,你可以给控件添属性什么的不就行了
      

  6.   

    这个按钮是服务器端控件
    -------------------------------
    最终还不是表现为一个input标签
      

  7.   

    诸位都理解错了,我说的服务器端按钮的意思是,已经有一个onclick="btnSubmit_Click"在后台执行代码了,要在这个基础之上加一个OnClientClick执行点击后将按钮设为不可用状态。
    xiahouwen(武眉博<活靶子.NET>) 兄的<asp:button  id=  "x  "  runat=  "server  "  OnClientClick=  "this.disabled=true;document.post.submit();  "  /  >  这个办法我试过了,我把document.post.submit(); 给去掉了,因为我的提交是在后台执行的。按钮变为不可用了,但是onclick="btnSubmit_Click"又不执行了~诸位,有没有两全的办法?
      

  8.   

    你的意思是提交过一次以后enable=false?
      

  9.   

    有一个办法!
    你放两个 asp:button,其中一个是激发事件的,另一个是enable=false 并且VISBILE为FALSE
    当按了第一个激发事件的按钮后:
    <asp:button id="x" runat="server" OnClientClick="备用按钮.style.display='';this.style.display='none'" />搞定!
      

  10.   

    sleepcraft(越学越不懂)
    你的意思是提交过一次以后enable=false?
    ======================================
    对,就是这个意思,防止重复提交的,在网页上很常见的一个功能,但是人家都是前台的简单表单提交,我这个不行,后台还有事件要执行的。
      

  11.   

    有一种方法,是重写page类,把postback的机制换掉,具体也说不上来了
      

  12.   

    不要这么麻烦啦,看以下代码
    private void Page_Load(object sender, System.EventArgs e)
    {
       this.Btn_Export.Attributes["onclick"] = this.GetPostBackEventReference(this.Btn_Export)+";this.disabled=true;";
    }注意这句话必须每次都执行(也就是说不要放在 IsPostBack 判断中),否则你就要确保
    function __doPostBack(eventTarget, eventArgument) 每次都会在 IE 中出现
      

  13.   

    sleepcraft(越学越不懂)
    你的意思是提交过一次以后enable=false?
    ======================================
    对,就是这个意思,防止重复提交的,在网页上很常见的一个功能,但是人家都是前台的简单表单提交,我这个不行,后台还有事件要执行的。我就有点搞不懂了
    你在click事件里的最后加上
    button.enable=false
    不就行了吗
      

  14.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="aaa.aspx.cs" Inherits="aaa" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
          <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" OnClientClick="this.form.submit();this.disabled=true" UseSubmitBehavior="False" /></div>
        </form>
    </body>
    </html>
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class aaa : System.Web.UI.Page
    {
      protected void Page_Load( object sender, EventArgs e )
      {
        if (Page.IsPostBack)
        {
          Button1.Attributes.Add("disabled", "disabled");
        }
      
      }
      protected void Button1_Click( object sender, EventArgs e )
      {
        string a = TextBox1.Text;
        Response.Write(a);
      }
    }
      

  15.   

    我就有点搞不懂了
    你在click事件里的最后加上
    button.enable=false
    不就行了吗
      

  16.   

    有些人没搞懂lz的意思,lz是要点了button后在客户端马上设为不可用,然后再执行后台代码。象孟子那样写代码已经执行完了之后,button才会被disable掉,不是lz要的效果建议在提交过程中跳一个层来实现,网上很多这样的代码
      

  17.   

    cityhunter172(寒羽枫)的代码可行
      

  18.   

    搞定了!!!
    OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False"
    而UseSubmitBehavior="False"这句才是最最关键的!OnClientClick="this.disabled=true;this.form.submit();"这句到哪里都能搜到,但是就是提交的时候不好使,加上了UseSubmitBehavior="False",KO。
    以前还真没注意过这个属性,想必很多人也都忽略了,这下长见识了。
    孟子兄多次救我于危难之中,感激之情一言难尽!!!本应该多给点分才对,不过由于资金有限,周转不畅,故只能勉强给这点了。下次争取翻倍!
    再次拜谢孟子兄,也多谢诸位的热情相助!!!多谢了!!!
      

  19.   

    没有UseSubmitBehavior这个属性啊?
      

  20.   

    <%@ Page Language="C#" %>
    试试下面的代码吧,我已经测试通过了,先Alert一下,可以看出来按钮已经禁用了
    直接用this.form.submit();虽然可以提交画面,但是不会执行Button1_Click这个函数的。<html>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" /></div>
        <asp:Button ID="Button2" runat="server" OnClick="Button1_Click" Text="Button2" /></div>
      </form>
    </body>
    </html><script language=C# runat=server>
      protected void Page_Load( object sender, EventArgs e )
      {
        Button1.Attributes.Add("onclick", "doit(this);");
        Button2.Attributes.Add("style", "display:none;");
      }
      protected void Button1_Click( object sender, EventArgs e )
      {
        string a = TextBox1.Text;
        Response.Write(a);
      }
    </script>
    <script language=javascript>
    function doit(obj){
      obj.disabled= true;
      alert(1);
      document.form1.Button2.click();
    }
    </script>
      

  21.   

    帮楼主顶一下。
    也借楼主的人气,提供一下我们的需求信息,国内部和赴日的都在招聘,赴日工程师日语三级相当水平或以上,国内部日语能看懂简单式样书即可。
    联系方式:[email protected](MSN)
      

  22.   

    我晕!
    这个问题吗?
    Button按钮有这个UseSubmitBehavior="False"
    就ok了!!
      

  23.   

    youbl(水边) :
    试试下面的代码吧,我已经测试通过了,先Alert一下,可以看出来按钮已经禁用了
    直接用this.form.submit();虽然可以提交画面,但是不会执行Button1_Click这个函数的。
    =======================
    老兄,你弄得太复杂了吧?像我这个,弄一个按钮的,简单一点,应该没问题。asp.net 2.0下测试通过。
      

  24.   

    cityhunter172(寒羽枫):
    不要这么麻烦啦,看以下代码
    private void Page_Load(object sender, System.EventArgs e)
    {
       this.Btn_Export.Attributes["onclick"] = this.GetPostBackEventReference(this.Btn_Export)+";this.disabled=true;";
    }注意这句话必须每次都执行(也就是说不要放在 IsPostBack 判断中),否则你就要确保
    function __doPostBack(eventTarget, eventArgument) 每次都会在 IE 中出现
    ========================================
    寒羽枫兄的方法也好使。对不住了寒羽枫兄,要不是myminimouse(坚决不用baidu)的提醒,差点把你的帖子漏过去。怪只怪你下边的钻石太耀眼了,没别的兴趣,就一个见钱眼开的毛病~唉,罪过罪过。
      

  25.   

    大家的方法都有问题,这个方法只能是在提交服务器以后按钮变成false,这样没什么意思,按钮变成false是为了防止在提交的过程中重复提交而不是提交以后再次提交。看一下论坛的“发出回复”按钮,他就是点击提交,在提交的过程中就变成false防止再次提交,像这样的也只能用JavaScript来写了。
      

  26.   

    看好了OnClientClick="this.form.submit();this.disabled=true" UseSubmitBehavior="False"OnClientClick的代码!!!!