2013-11-28 29 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> 
相關問題