运行 在 asp.net 应用 javascript 响应前的代码 window 下载

Run in asp.net app javascript code before response window download

我开发了一个页面,当用户单击一个按钮时,在查询之后可以下载一个 xlsx。 查询可能需要几秒钟,所以我想在操作期间隐藏按钮。

我知道这通常是一个简单的操作,通过按钮上的js:

<asp:ImageButton id="Bt" OnClientClick=" this.style.display = 'none';  />

脚本结束时服务器端:

Bt.Style.Add("display", "inline");

但是为了制作 xslx,我使用了这段代码:

response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("Content-Disposition", "attachment; filename=name.xlsx");
response.TransmitFile(file_path);
response.Flush();
response.End();

清除响应上下文不允许我在脚本中 运行 其他 javascript 代码(它根本不起作用),所以我不知道如何设置内联按钮。

ADyson在评论中的建议是正确的。没有舒适的解决方案来解决这个问题。 顺便说一句,我做了一个技巧来解决这个问题,它有点蹩脚,但它很简单而且有效。如果它对某人有用,我 post 无论如何。

try
{
   ...
}
catch
{
   ...
}
finally
{
  script = "document.getElementById('Bt').style.display = 'inline';";
  if(add_click)
     script += "document.getElementById('Bt_Download_Hidden').click();";

 Page.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page), "alert", @"
     <script type=""text/javascript"">
       " + script + @"
     </script>");
        }

在按钮中,在我完成所有工作之前,我只是准备了 xlsx 并将结果路径存储在会话变量中。 正如您在 finally 子句 i 运行 中看到的那样,一个脚本总是将按钮的可见性设置回内联,最后,如果一切正常,它会单击一个隐藏的按钮。在第二个按钮中,我输入了下载文件的代码。 所以我强制冲洗操作是最后一个。