2010-04-10 74 views
1

我有一个Reports.aspx ASP.NET页面,允许用户通过单击几个超链接来下载Excel报告文件。当单击报告超链接时,我使用javascript window.open方法打开一个新窗口并导航到download.aspx页面。下载页面的代码隐藏使用openxml(在内存中)即时创建一个excel文件并将其发送回浏览器。下面是一些来自download.aspx页面的代码:ASP.net下载页面

byte[] outputFileBytes = CreateExcelReport().ToArray(); 
    Response.Clear(); 
    Response.BufferOutput = true; 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", "tempReport.xlsx")); 
    Response.BinaryWrite(outputFileBytes); 
    Response.Flush(); 
    Response.Close(); 
    Response.End(); 

我的问题:其中一些报告需要一些时间才能生成。我想在我的Reports.aspx页面上显示一个loading.gif文件,同时请求download.aspx页面。一旦页面请求完成,应该使loading.gif文件不可见。

有没有办法做到这一点。也许是某种事件。我有我的处置机器人。

谢谢

PS。我知道生成像这样的报告并不理想,但这是一个不同的故事......

回答

0

最好将您的报告生成逻辑移动到ASP处理程序,因为这里没有涉及到UI。

在你download.aspx页面,在一个看不见的IFRAME打开处理程序,并显示您的download.aspx页面上加载动画

onload事件到相框中download.aspx添加删除加载动画。

像这样的事情

<html> 
<body> 
<iframe id='myframe' src='http://www.google.com'></iframe> 
<script language='javascript'> 
var ifr=document.getElementById('myframe'); 
ifr.onload=function(){alert('hello');} 
</script> 
</body> 
</html> 
+0

设置你的框架SRC您HTTP处理程序或网页。设置是高度和宽度为0.而不是警报你好,编写代码来隐藏你的“加载”元素 – Midhat 2010-04-10 10:25:41

+0

我对asp.net来说很新,你是什么意思的处理程序?此外,iframe onload在下载时不会触发。它只会在您的示例中请求诸如google之类的网站时触发。 – MegaByte 2010-04-10 10:30:54

+0

处理程序只是一个代码文件(带.ashx扩展名),用于处理请求而不显式地具有UI(是的,您可以在响应中输出html标签,但那不是写入处理程序的要点)。如果您熟悉J2EE,请将它看作是一个servlet。 如果您使用处理程序,则可以跳过整个新窗口全部收集,并让用户的浏览器接管进度演示文稿 – Midhat 2010-04-10 10:58:43