【问题标题】:Prevent double submiting in asp:CommandField防止在 asp:CommandField 中重复提交
【发布时间】:2013-02-27 18:39:42
【问题描述】:

有这个代码:

<asp:UpdatePanel ID="id">
 <asp:CommandField ButtonType="Image" InsertImageUrl="url/here" ShowInsertImage="true" ValidationGroup="valGr" />
</asp:UpdatePanel>

如何防止在 C# 代码中双击此按钮。

【问题讨论】:

  • 也许某些 javascript 会吃掉在第一次点击后 X 毫秒内发生的任何点击事件?
  • 是的,你是对的,我已经找到了一些 javascript 代码,但我不知道如何找到这个按钮,因为我是如何知道 asp 自动生成 html 代码的,而且我很难找到这个按钮。
  • 是的,自动生成的 ID 很麻烦。如果您发布 javascript,我可以向您展示如何进行元素选择
  • 我通过堆栈溢出进行了搜索,我在这里找到了一些东西:stackoverflow.com/questions/2830542/…
  • 好的,如果您尝试按 ID 进行选择,请使用以下代码获取 HTML 元素的 ID:&lt;%= id.ClientID =&gt;(这将为您提供更新面板的客户端 ID。如果您想要另一个元素的客户端 ID,只需替换该元素的 ID。

标签: asp.net double-submit-prevention


【解决方案1】:

您可以首先创建一个保存提交的标志并将其添加到表单中。然后在 UpdatePanel 进行更新并等待返回时打开和关闭该标志。

例如,此代码仅在以下情况下才允许提交表单(和更新面板) fAlloToSubmittrue

<script>
    var fAlloToSubmit = true;

    function AllowFormToRun()
    {
      if(!fAlloToSubmit)
          alert("Please wait for the page to fully re-loaded.");

      return fAlloToSubmit;
    }
</script>

并在您后面的代码上将其设置在表单上。

protected void Page_Load(object sender, EventArgs e)
{
   Page.Form.Attributes["onsubmit"] = "return AllowFormToRun();";
}

现在对于 UpdatePanel,您在进行更新时打开该标志,例如,当您单击该命令时:

<script>
var prm = Sys.WebForms.PageRequestManager.getInstance();    
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);

function InitializeRequest(sender, args) {
   // here is run when you click the command on the UpdatePanel      
   fAlloToSubmit = false;
}

function EndRequest(sender, args) {
   // here is come after the upadate of the command
   fAlloToSubmit = true;
}
</script>

这里的诀窍是我持有要提交的表单,而不是查看页面上的每个控件来禁用它。

【讨论】:

  • @MorarMihai 此代码有效。如果你喜欢它,可以调整它,或者改进它。
  • 您的意思是 Page.Form.Attributes["onsubmit"] 接受提交的按钮,即使可能有更多按钮(例如 InsertButton、EditButton、CancelButton 等)。所以代码必须适用于所有类型的按钮?我可以把脚本放在同一个文件里吗?
  • @MorarMihai 该表单保留页面的完整提交,这意味着保留所有类型的按钮,任何类型的提交,甚至是javascript调用。是的,脚本与页面一起使用。
  • 代码运行良好,谢谢 Aristos。你如何找到这些答案?
  • uau,太棒了。你能给我一些关于这个asp标签的教程吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2016-12-07
  • 1970-01-01
  • 2022-07-12
相关资源
最近更新 更多