我正在尝试使用双人互动进行网络实验。为了做到这一点,不允许双击是至关重要的。我使用以下代码(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;
}
当我在本地主机上运行应用程序时,按钮被禁用得足够快,以防止任何双击。在服务器上它不够快,当点击两三个按钮足够快时,整个应用程序/实验就会卡住。
有什么方法可以解决这个问题吗?
谢谢!
答案 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>