使用JS禁用“提交”按钮后,在文件下载后重新启用

时间:2010-11-11 10:09:58

标签: c# javascript asp.net html-form

我正在开发一个ASP.NET应用程序。目前,当用户点击某个项目上的“保存”时,我们会禁用“保存”按钮,将其文本更改为“正在保存...”,依此类推。这样可以正常工作,因为该按钮会导致回发,从而导致加载新页面,不再禁用“保存”按钮。

我们现在想将此应用于其他操作:发布(与保存没有太大区别),导入(再次,很像保存,但基于用户在上一步中上传的数据),导出(下载XML文件)给用户)等。

导出导致我出现问题 - 按钮保持禁用状态。我认为这是因为服务器发送回一个XML文件而不是新的网页,因此浏览器只显示相同的页面。

服务器端代码与

一致
Response.Clear();
Response.BufferOutput = true;
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + whatever);
[push file contents into Response.OutputStream]
Response.End();

[不知道这是不是很好的代码 - 它不是我的 - 但它确实起作用了:)]

基本上,我想知道:

  • 一种让服务器在响应和XML中发回新页面的方法,从而以与其他页面相同的方式重新启用按钮,或者
  • 一种在文件发送后让浏览器/ JS重新启用按钮的方法。

3 个答案:

答案 0 :(得分:1)

看起来this应该这样做:实际上,设置一个带有文件响应的cookie,并让浏览器等待该cookie以取消阻止该页面。

答案 1 :(得分:0)

问题可能是您根本没有加载新页面。

由于内容存储是附件,浏览器不会重新加载页面,只会将服务器的返回保存到磁盘。

你需要重新加载一些页面,但我对文件提取后如何做到这一点并不是很好。

答案 2 :(得分:0)

有一个肮脏的黑客。您可以使用setTimeOut方法启用和更改后退按钮标题/图像。

因此,您可以编写类似于

的服务器端代码

btn.Attributes.Add(“onclick”,“this.disabled ='true'; this.value ='Processing ...'; _ doPostback(this,null); setTimeout(function(){enable button logic。 ...设置按钮的文本/ img},);“);

服务器端下载附件事件不会完美同步,但您可以将超时设置为2-5秒,具体取决于您的服务器配置。

谢谢!