【问题标题】:Disable 'submit' button without javascript禁用没有javascript的“提交”按钮
【发布时间】:2012-12-25 01:21:16
【问题描述】:

我正在尝试对“双重提交”问题实施某种解决方案,当有一个提交按钮触发需要一些时间运行的代码例程时,就会出现这种问题。

不幸的是,很多用户仍在使用旧的互联网浏览器和一些运行无脚本插件。我无法使用 javascript。

有没有办法在asp.net中单击按钮后禁用按钮?

【问题讨论】:

  • 不知道为什么这被否决了...我认为 OP 提出了一个明智的问题
  • 长期运行进程的替代解决方案是释放 UI 并将任务传递给另一个线程。例如,一旦用户点击按钮,回发到服务器并安排任务(让后台线程执行该任务)。然后返回给用户一条消息,说明您的任务已被安排。
  • @Win 往返需要一两秒钟,如果连接速度较慢,可能需要更长的时间。双击发生得非常快(至少可能发生)。
  • 我知道这是一个厚颜无耻的答案,但您可以使用 VBScript(技术上不是 JavaScript)。

标签: c# asp.net submit


【解决方案1】:

由于您想在用户单击后(并且您的页面仍在加载时)禁用该按钮,因此必须在客户端完成。 JavaScript 是唯一可以用于此目的的客户端语言。

因此,请确保如果用户禁用了 Javascript(现在几乎不可能),您的最终页面可以处理“双重提交”数据。

【讨论】:

    【解决方案2】:

    短篇小说,不。

    在您的情况下,您需要编写一些服务器端代码来检测重复发布,然后丢弃重复请求。

    【讨论】:

      【解决方案3】:

      您可以在每次单击按钮后在服务器上启动计时器并将其置于会话中。在下次点击时,您可以检查计时器并应用或拒绝下一次用户点击。

      【讨论】:

        【解决方案4】:

        在按钮点击事件中只需编写代码

        {
        
        //Some Code
        
        button1.Enabled = false;
        
        }
        

        【讨论】:

        • 这并没有解决用户在页面刷新前第二次点击按钮的问题(想想上传大文件需要多长时间)
        • 你看到问题中“没有 Javascript”的部分了吗?
        【解决方案5】:

        因此,如果没有一些客户端脚本,就不可能禁用按钮。如果您假设它将被禁用,无论它是哪种客户端脚本,那都是一项不可能完成的任务。

        可以做的是确保他们尝试执行的操作在每次页面加载时不会运行超过一次。

        1. 加载页面时创建隐藏字段;使用 GUID 填充该字段。
        2. 在服务器端点击处理程序的开始处输入一个Lock 块。
        3. 根据该 GUID 检查是否存在会话密钥。 (给它一个前缀,这样它就不会与任何其他基于 GUID 的会话密钥发生冲突。)
        4. 如果密钥存在,退出lock 块并且什么都不做,或者显示某种错误消息。
        5. 如果它们的键不存在,则向该会话键添加一个新值,退出lock 块,然后执行您的操作。给会话密钥一个合适的过期时间;它不应该超过几分钟。您甚至可以在操作结束时删除相关的会话密钥,如果在此时重复它是有意义的。

        【讨论】:

          猜你喜欢
          • 2010-12-30
          • 2019-03-19
          • 2011-03-05
          • 2017-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          相关资源
          最近更新 更多