【问题标题】:Disable /change button text until click procedure complate?在单击过程完成之前禁用/更改按钮文本?
【发布时间】:2014-05-03 08:57:41
【问题描述】:

我的 web 表单中有 asp 按钮 (runat="server") 进入更新面板。

<asp:UpdatePanel ID="UpdatePanelDoIt" runat="server">
<asp:Literal ID="LiteralDoIt" runat="server"></asp:Literal>
   <asp:Button ID="ButtonDoIt" runat="server" Text="DoIt"/>     
</asp:UpdatePanel>   

当我点击时,这个按钮会做一些事情。

Private Sub ButtonDoIt_Click(sender As Object, e As EventArgs) Handles ButtonDoIt.Click

   me.ButtonDoIt.Enabled=False
   me.ButtonDoIt.Text="Please wait..."

   bla bla bla bla 'it takse one or two minute
   LiteralDoIt.Text="<a href= bla bla"
   bla bla bla bla

   'finish process

   me.ButtonDoIt.Enabled=true
   me.ButtonDoIt.Text="Process Complete!"

End Sub

但我的按钮未禁用或单击此按钮时未更改文本

只有在处理完成后我才能看到“处理完成”。

在 Windows 表单中,我总是在更改按钮文本行后使用“application.doevent”。我看到我的表单发生了变化。

但是asp.net不允许这样做。(我使用vb.net)

我该怎么办?

非常感谢您的关注。

【问题讨论】:

    标签: c# javascript jquery asp.net vb.net


    【解决方案1】:

    试试这个

    HTML

    <input type="submit" id="btnid" value="Save" />
    

    JS

     $(function(){
           $('#btnid').click(function(){
            $(this).val('processing...');
            $(this).prop('disabled',true);
            setTimeout(function(){$('#btnid').val('finished');$('#btnid').removeAttr('disabled');},5000);
        });
     });
    

    DEMO HERE

    【讨论】:

    • 谢谢,但我在服务器端的真实进程代码行在哪里?这个例子不适合我。
    • 你标记了jquery,这就是我使用jquery的原因。我希望你也需要同样的功能。
    【解决方案2】:
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
    <title>Disable Button and Change Text of button</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="sc" runat="server" EnablePartialRendering="true">
    </asp:ScriptManager>
    
     <script type="text/javascript">
     Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
     function BeginRequestHandler(sender, args) {
     document.getElementById('<%= lblMessage.ClientID %>').innerText = "Processing...";
     args.get_postBackElement().disabled = true;
     }
     </script>
    
    <asp:UpdatePanel ID="updpnlSubmit" runat="server">
    <ContentTemplate>
    <asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClick="btnSubmit_Click" />
    <asp:Label ID="lblMessage" runat="server"></asp:Label>
    </ContentTemplate>
    </asp:UpdatePanel>
    </form>
    </body>
    </html>
    

    在源页面中添加脚本标签。更改代码中按钮的 ID。您可以禁用按钮,直到进程完成执行。

    【讨论】:

    • 这正是我想要的。非常感谢布拉德!
    【解决方案3】:

    您可以使用 ajax,或者您需要估计时间并像 @Kiranramchadran 那样做。

    看下面在 VB.NET 中使用 AJAX 的例子

    类名

    Public Class NameHere

    VB 页面加载

    Ajax.Utility.RegisterTypeForAjax(GetType(NameHere), Me.Page)
    

    VB函数

    <Ajax.AjaxMethod()> _
    Public Function ButtonClick() ...
    

    Javascript

    $('#btn').click(function(){
        // Here you can disable your button
    
        // Call your ajax function
        NameHere.ButtonClick();
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2015-06-20
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多