在好多网站上看见过点击按钮后界面灰掉,处理完毕后界面才恢复正常,在asp.net中如何实现这种效果,请求高手指点,或者实现相应功能也可以,我现在碰见的问题是点击一个按钮后,后台在处理事件的过程中,操作人员又点击了一次。

解决方案 »

  1.   

    不会吧,.net不会处理不了这个问题吧
      

  2.   

    你先吧button控件的Enable属性设置为false,然后观察他的html,把样式复制出来,下一步你在处理时,给buttons加如这个样式,结束时把样式取消了就行了。
      

  3.   

    this.Button1.Enabled=false;///do somethings this.Button1.Enabled=true;
      

  4.   

    给一个flag=true,第一次点击是可以执行,flag=false,第二次先判断flag再执行
      

  5.   

    先用javascript将按钮灰掉。因为javascript是在服务器事件处理之前,所以一点就能灰掉。
      

  6.   

    先记录初始状态,第二次取反
    如 
    bool flag=false;
    this.button.Enable=!flag;
      

  7.   

    下载个OnClickButton
    http://www.oneclickbutton.de/index.php
      

  8.   

    在aspx中增加一个hiddenfield
    aspx.cs中,button_clicked事件加入:
    hfDisabledButton.Value = btn.ID;
    在page_load中加入:
    Button b = (Button)FindControl(Request["ctl00$cpMain$ctl00$hfDisabledButton"]);
                    if (b != null)
                    {
                        b.Enabled = false;
                        b.Style.Value = "color:#999999;";
                    }
    以后再有postback事件也不会让button重新enable。
      

  9.   

    看看这里吧。
    http://www.cnblogs.com/Jinglecat/archive/2007/07/10/811946.html#821900
      

  10.   


    無效的...他是在一個過程中,沒有POST到客戶端的,這個時候還是可以點擊的.
    其實很簡單,用JAVASCRIPT來實現啊,
    第一種方法:在onclick事件中綁定把自己disabled
    前端頁面:<!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>    <script type="text/javascript">
            function disabledthis(o) {
                o.disabled = "disabled";
                __doPostBack(o.id, "");
            }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" />
            <a href="#" onclick="<% =PostBack %>"></a>
        </div>
        </form>
    </body>
    </html>
    后臺代碼:    Protected PostBack As String = ""    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            PostBack = ClientScript.GetPostBackEventReference(Button1, "")
            If Not IsPostBack Then
                Button1.Attributes.Add("onclick", "javascript:disabledthis(this);")
            End If
        End Sub    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Threading.Thread.Sleep(1000)
        End Sub
      

  11.   

    点击button1后,代码中设置button1的Button1.Enabled=false;后台处理完工作后,总有一个键保存把,比如说是Button2,  Button2事件处理完后,最后一句加上Button1.Enabled=true
      

  12.   

    自己去測試,Button1在執行自己的事件的時候,是在服務器端執行的,客戶端的Button1只是HTML標記而已,沒有被disabled掉,用戶還是可以狂點的... 
    樓主是要不讓用戶點...
      

  13.   

    另外我不喜欢Threading.Thread.Sleep(1000),这种方式,如果这个值设置小了,用户可以再次点击,如果这个值设置大了就让用户在那里等着,太浪费资源了,还有没有其他办法解决呢。
      

  14.   

    我倒了,我代码中写Threading.Thread.Sleep(1000),是为了让你看到效果,这里面你可以写你自己的需要运行的代码,当运行你自己的代码的时候肯定需要时间的,这个时候前端控件已经被Disabled掉了,等待下一次PostBack回来,按键控件才会被置为可用.
    完全已经实现你要的了啊... 还有第二种方法,就是使用一个隐藏的层,当点按键的时候把这个隐藏层显示出来并覆盖掉当前的页面,等程式Postback完毕,隐藏层又会消失掉
      

  15.   

    首先向你说声不好意思,误会你了,你的方法我试了,把你的方法放入button事件后不执行,不知道是我试验的有问题,还是我没有理解你的意思,能不能麻烦你直接写成button触发的,因为我现在就是用button。
      

  16.   

    瘋了.. 我這個就是Button事件啊,你看到:"Button1.Attributes.Add("onclick", "javascript:disabledthis(this);")" 這句沒?
    之所以我使用一個<a>的標記,是為了讓前端有 __doPostBack Function 的 JS,你也可以自己寫的,不過不推薦而已
      

  17.   

    给一个flag=true,第一次点击是可以执行,flag=false,第二次先判断flag再执行简单问题别复杂化了。
      

  18.   

    第二種方法,層覆蓋的形式
    前端:<!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>    <script type="text/javascript">
            function ScreenWaiting() {
                var o;
                var x, y;
                x = screen.availWidth;
                y = screen.availHeight;
                o = document.getElementById("pWaiting");
                o.style.width = x;
                o.style.height = y;
                o.style.visibility = "visible";
                o.style.top = 0;
                o.style.left = 0;
                o.getFoucs;
            }
        </script>    <style type="text/css">
            .snake
            {
                background: Silver;
                filter: alpha(opacity=50); /*IE*/
                -moz-opacity: 0.5; /*MOZ , FF*/
                opacity: 0.5; /*CSS3, FF1.5*/
                position: absolute;
                visibility: hidden;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="height: 300px; width: 300px; border: solid 1px blue">
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </div>
        </form>
        <div id="pWaiting" class="snake">
            <center>
                <p>
                    Processing... ...
                </p>
            </center>
        </div>
    </body>
    </html>后臺:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                Button1.Attributes.Add("onclick", "javascript:ScreenWaiting();")
            End If
        End Sub    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Threading.Thread.Sleep(3000)
        End Sub
    完畢,我提及的兩種方法都是Javascript實現的
      

  19.   

    可以使用JavaScript来实现
    思路:在提交的时候调用js代码将页面属性visibility:hidden;同时调用一个 “正在操作中,请稍后。。”的等待效果
    当后台执行完成后,会自动刷新页面,js代码自动失效,以前的页面再次重现
      

  20.   


    那是用ajax处理的,异步交互成功后把层去掉
      

  21.   

    还是使用AJAX吧,点击一下后,使按钮不可用,当数据提交成功后恢复
      

  22.   

    多谢楼上各位老大,最后使用了div覆盖的方法处理的,多谢。
      

  23.   

    从这个帖子可见,很多人是不懂.NET的
      

  24.   

    这样好像是可以的 
    JS:
    function CheckOnce(btn)
        {
            if(typeof(Page_ClientValidate) == 'function')
            {
                 if (Page_ClientValidate() == false) 
                 { return false; }
            }
            
            if (btn.getAttribute('type') == 'button')
                    {
                       btn.disabled = true;
                    }
                     
                  return true;     }
    然后 Click事件里面 写 System.Threading.Thread.Sleep(1000);然后 button有几个属性要注意一下<asp:button id="btnSave" Text='<%#ResourceMng.GetResource("ASP-M.969660")%>' CssClass="button" Runat="server" onclick="btnSave_Click"
        UseSubmitBehavior="false" OnClientClick="CheckOnce(this)" ValidationGroup="SubgurimTest">
    </asp:button>