【问题标题】:Preventing Double Clicking with Server Side Validation使用服务器端验证防止双击
【发布时间】:2009-08-13 20:24:25
【问题描述】:

我试图阻止用户双击我正在更新的页面的提交按钮。问题是必须进行服务器端验证以确定用户是否必须在我们继续之前进行任何更新。我目前在我的表单提交事件中有以下代码。

<asp:Button ID="SubmitPayment" runat="server" OnClientClick="this.disabled='true';" UseSubmitBehavior="false" OnClick="SubmitPayment_Click" Text="Submit" />

这成为一个问题的地方是页面没有通过验证。在这种情况下,我尝试启用该按钮的所有操作都失败了。他们很难在禁用提交按钮的情况下重新提交更正的信息。我在验证结束时尝试了以下两种方法来重新启用它。

SubmitPayment.Enabled = true;
SubmitPayment.Attributes.Add("disabled", "false);

我必须做什么才能重新启用此控件?这是在 Visual Studio 2005 中。提前致谢。

-编辑- 我使用的方法如下。我添加了一个额外的诱饵按钮,该按钮被禁用并将显示 css 属性设置为无。然后我使用了隐藏提交按钮并在 OnClientClick 事件中显示诱饵按钮的 javascript。最后,服务器端方法的末尾会更新按钮上的 css 属性以隐藏和显示它们。

代码段如下。再次感谢您的帮助

function PreventDoubleClick()
    {
        var sp = document.getElementById("SubmitPayment");
        var db = document.getElementById("DecoyButton");
        sp.style.display = "none";
        db.style.display = "inline";
    }

<asp:Button ID="SubmitPayment" runat="server" OnClientClick="javascript:PreventDoubleClick();" UseSubmitBehavior="false" OnClick="SubmitPayment_Click" Text="Submit" />
<asp:Button ID="DecoyButton" Enabled="false" runat="server" style="display:none;" Text="Please Wait..."/>

DecoyButton.Style.Add("display", "none");
SubmitPayment.Style.Add("display", "inline");

【问题讨论】:

  • 所以 SubmitPayment.Attributes.Add("disabled", "true");或 SubmitPayment.Attributes.Remove("disabled", "false");不做这项工作?你有一个奇怪的问题。对于双击所有内容的白痴该怎么办(诚然,这不是他们的错,而是桌面界面设计师的错)。

标签: asp.net asp.net-2.0


【解决方案1】:

我之前遇到过类似的问题,我想出的最佳解决方案是隐藏按钮并将其替换为请稍候(或验证)消息。如果验证失败,您可以再次显示该按钮

【讨论】:

  • 不能说这是我最喜欢的方法,但这是我能找到的唯一可行的方法。感谢您的建议。
  • 事实证明,我在帖子中添加的解决方案还有另一个问题。如果多次运行,诱饵按钮将永久保留在页面上。关于如何解决这个问题的任何想法?
猜你喜欢
  • 2017-06-17
  • 2016-03-03
  • 2014-11-30
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多