就像以前我们开发asp程序的时候,如果某个操作执行比较慢,就把这个按钮设定为enabled=false,然后防止用户再点击,重复操作,怎么实现呢?

解决方案 »

  1.   

    不可以,没有效果...但是可以用javascript来实现达到你的效果
      

  2.   

    服务器端button点击后能否先enabled=false,然后再执行其click方法里边的代码 ?
    可以,你试试就知道了:
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Button Button1;private void Button1_Click(object sender, System.EventArgs e)
    {
        this.Button1.Enabled=false;
        this.Label1.Text=sender.GetType().ToString();
    }
    上面的先将enabled属性设为false,后将Label1的text属性设为System.Web.UI.WebControls.Button
      

  3.   

    正确的方法是在Page_Load中加入下面一句:
    Response.Write("<script>var imgBtnReadOKClickTimer=0;window.attachEvent(\"onload\", function(){if(window.document.getElementById(\"imgBtnReadOK\")==null || window.document.getElementById(\"imgBtnReadOK\")==\"undefined\")return;window.document.getElementById(\"imgBtnReadOK\").attachEvent(\"onclick\", function(){imgBtnReadOKClickTimer++;if(imgBtnReadOKClickTimer !=1)return(false);});});</script>");
    其中imgBtnReadOK为Button的ID,你只需要把它替换成你想要的Button ID就可以了
      

  4.   

    to lovinger2000(EUDEV.NET) ,我试过了,不好用阿
      

  5.   

    在pageload里加一个buttonname.Attributes.Add("onClick","javascript:document.buttonname.disabled=\"disabled\";");
      

  6.   

    用 lovinger2000(EUDEV.NET) 和ldhao(翰海) 的方法都可以实现"按钮设定为enabled=false"的效果,可是该button下边的服务器端的代码也不执行了阿
      

  7.   

    use this <input type=button onclick="SetDisabled"  runat=server id="button1" ....>
    <script language=javascript >
     function SetDisabled() 
    {
       document.all.button1.disabled=true;
    }服务器端
    Server.click....上面的是实现方法,代码未经测试,但思路一定正确
      

  8.   

    在webform3.aspx中代码如下:
    <%@ Page language="c#" Codebehind="WebForm3.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm3" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm3</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

    <script language=javascript >
    function abc()
    {
    var mybutton=document.getElementById("Button1");
    mybutton.disabled=true;    //变灰
    __doPostBack("Button1","");  //执行服务器端button1的click事件
    }

    </script>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"></asp:TextBox>
    <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 40px" runat="server"
    Text="Button"></asp:Button>
    </form>
    </body>
    </HTML>在webform3.aspx.cs中主要两个方法中的代码如下 :
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    this.GetPostBackEventReference(Button1);  //这句很关键,有这句才能让客户端执行服务器端事件。
    Button1.Attributes.Add("onclick","abc();");  }
    //用作测试用的
    private void Button1_Click(object sender, System.EventArgs e)
    {
    this.TextBox1.Text="1";
    int k=0;
    for(int i=0;i<9999;i++)
    for(int j=0 ;j<999;j++)
    k=9;
    this.TextBox1.Text="1";
    }测试结果:由于两个循环运行时间比较长,在运行时,button按钮一直是灰的,只有运行完才会恢复,如果运行完后还想变为灰的,那在最后添加一个this.Button1.Enabled=false;就行了。这样就达到了按钮先变灰然后执行服务器端事件。