0

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

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

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

4

5 回答 5

2

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

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

于 2013-01-10T15:42:03.133 回答
1

短篇小说,没有。

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

于 2013-01-10T15:42:42.553 回答
0

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

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

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

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

于 2013-01-10T15:44:57.833 回答
-2

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

{

//Some Code

button1.Enabled = false;

}
于 2013-01-10T15:46:09.210 回答