在 postback 过程中禁用 asp.net 动态按钮的点击事件,之后再启用它

5
我正在代码中动态创建一个按钮,并将点击事件附加到它上面。但是,当有进程正在进行时,我必须防止人们点击它。因此,当它被点击一次后,应该被禁用,当进程结束后再启用。我该怎么做?
谢谢。
3个回答

4

如果你的意思是 mybutton.onlick = "this.enabled=false",那么它并没有定义 onlick 方法。 - stckvrflw
如果您想要在服务器端禁用按钮,可以很容易地使用btnAdd.Enabled = false;。而如果您想要在按钮被点击后触发客户端事件,也可以实现该功能。 - Ravi Vanapalli

2
如果您在单击按钮时通过ajax进行处理- 1. 在处理开始时禁用按钮 2. 处理完成后启用按钮
如果按钮回发,最好的方法是通过javascript禁用按钮当它被点击时[我不会建议仅为此特定任务使用jquery]。由于回发后按钮将像之前一样启用,因此您无需担心启用。
    <asp:Button ID="btn" runat="server" OnClientClick="disable(this)"
Text="Click me!" OnClick="btn_Click" />

 <script type="text/javascript">
        function disable(control)
        {
            control.disabled="disabled";
            //added alert to give the snapshot of what happens
            //when the button is clicked
            alert(100);
        }
 </script>

希望这可以帮到您。

以及在后台回发结束后它将如何重新启用自己? - stckvrflw
1
我写的代码和你的类似。一切都一样,但现在 OnClick="btn_Click" 没有触发。如果我删除 OnClientClick ="disable(this)",那么 OnClick 就会触发。你认为呢? - stckvrflw
在C#中,提交后您可以使用ClientScript注册一个脚本,以删除按钮的禁用属性。 - sangam
是的,现在这个解决方案可行- http://dotnetspidor.blogspot.com/2010/01/disable-button-in-asp-net-web-page-to.html。我想编辑我的答案,但那样不好。让缺陷存在,以便程序员看到进化。 - sangam

0
我会在按钮周围使用UpdatePanel。点击后,您可以在服务器端禁用按钮。在updatepanel上使用触发器,每x秒查看外部进程是否返回结果。我建议您将长时间运行的过程外包给一个Windows服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接