Button.Enabled = false很慢,允许双击

时间:2013-11-28 07:55:53

标签: c# asp.net

我正在尝试使用双人互动进行网络实验。为了做到这一点,不允许双击是至关重要的。我使用以下代码(C#,ASP.NET):

            protected void decisionM2Button_Click(object sender, EventArgs e)
            {
            decisionM2Button.Enabled = false;
            decisionM1Button.Enabled = false;
            decisionP0Button.Enabled = false;
            decisionP1Button.Enabled = false;
            decisionP2Button.Enabled = false;
            }

当我在本地主机上运行应用程序时,按钮被禁用得足够快,以防止任何双击。在服务器上它不够快,当点击两三个按钮足够快时,整个应用程序/实验就会卡住。

有什么方法可以解决这个问题吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

客户端的解决方案很快,但也可以轻松绕过它。

如果你对有效性感兴趣(你显然是这样,否则你只是告诉你的玩家不要点击两次,该死!)),最好的方法是确保只有第一次点击计数。根据您的应用程序,会话可能足以满足您的需求 - 首次单击,在会话中设置值。每个按钮将首先检查会话,如果预期值已经存在,则立即返回。然后,您可以在适当的时候重置会话。

当然,还有很多其他方法来存储这种状态,但我必须更多地了解你实际上要做什么,以及在什么样的环境中。

答案 1 :(得分:0)

一旦点击,禁用它,尝试分配一个CSS类,它将隐藏它..这可能足够快..

您可以按如下方式动态设置css到按钮:

 button.css="cssClassname";

你可以通过动态java脚本做的另一件事..调用javscript函数并从客户端而不是从服务器端禁用它..

希望这会有所帮助..

答案 2 :(得分:0)

JavaScript / JQuery将是您的选择IMO,但客户端可以通过外部工具进行修改,所以请考虑一下。

答案 3 :(得分:0)

应用ajax UpdateProgress并将您的代码放在UpdatePanel中:

    <aspAtlas:UpdateProgress ID="upUpdatePanelProgress" runat="server" DisplayAfter="0"
            DynamicLayout="true" AssociatedUpdatePanelID="updpnlProgram">
            <ProgressTemplate>
                <asp:Panel ID="Panel1" CssClass="overlay" runat="server">
                        <img runat="server" id="img1" src="../Images/UpdateProgress.gif" alt="Loading..." /><br />
                        <br />
                        <b>Loading...</b>
                    </asp:Panel>
            </ProgressTemplate>
        </aspAtlas:UpdateProgress>
 <aspAtlas:UpdatePanel runat="server" ID="updpnlProgram" UpdateMode="Conditional">
        <ContentTemplate>
<div>
//--Your code in this div
</div>
 </ContentTemplate>
        <Triggers>
            <aspAtlas:PostBackTrigger ControlID="decisionM2Button" />
        </Triggers>
    </aspAtlas:UpdatePanel>