2013-11-28 79 views
0

我正在尝试运行使用双人游戏互动的网络实验。为了做到这一点,不允许双击是至关重要的。我用下面的代码(C#,ASP.NET):Button.Enabled = false很慢并且允许双击

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

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

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

谢谢!

+3

为什么不通过JavaScript来做呢?它降低了服务器的工作负载,并且可以立即做出反应 – User2012384

+0

http://stackoverflow.com/questions/1498269/asp-net-double-click-problem的复制副本? –

回答

1

解决方案是快,但它也可以很容易绕过。

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

当然,还有很多其他的方式来存储这种状态,但我必须知道更多关于你实际尝试做什么以及在什么样的环境中。

0

只要点击而成,这一翻译的禁用它,尝试如下分配一个CSS类将隐藏it..this可能是速度不够快..

您可以动态设置CSS的按钮:

​​

,您可以通过动态的Java脚本做其他的事情..调用javscript功能,从客户端,而不是从服务器端禁用它..

希望这有助于..

0

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

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> 
相关问题