2013-01-10 63 views
0

我试图实现某种解决方案的'双提交'的问题发生时,有一个提交按钮,触发需要一些时间运行的代码例程。禁用'提交'按钮没有javascript

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

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

+0

不知道为什么这是downvoted ...我想OP问一个明智的问题 – freefaller

+0

长期运行的过程的替代解决方案是释放UI并将任务传递给另一个线程。例如,一旦用户点击按钮,回发到服务器并安排任务(让后台线程执行该任务)。然后返回给用户,并提示您的任务已安排。 – Win

+0

@Win往返旅程需要一两秒钟,可能需要较长的连接时间。双击很快就会发生(至少可能)。 – Servy

回答

2

由于您想在用户点击后(以及您的页面仍在载入时)禁用按钮,它必须在客户端完成。 JavaScript是唯一可以用于此目的的客户端语言。

因此,请确保如果用户禁用Javascript(这些日子不太可能),您的最终页面可以处理“双重提交”的数据。

1

短篇小说,没有。

在您的情况下,您需要制作一些服务器端代码来检测双重帖子,然后放弃重复请求。

0

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

-2
在按钮单击事件

只写代码

{ 

//Some Code 

button1.Enabled = false; 

} 
+0

这并没有解决用户在页面刷新前第二次单击按钮的问题(想想上传一个大文件需要多长时间) – freefaller

+0

您是否看到“没有Javascript的问题”部分“? –

0

因此,这将是不可能的禁用按钮不一些还挺客户端脚本。如果你认为它会被禁用,无论它是什么样的客户端脚本,那么这是一个不可能完成的任务。

可以做的是确保他们试图执行的操作永远不会每页加载运行超过一次。

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