返回报告数据后如何停止动画GIF?

时间:2010-06-01 14:03:51

标签: asp.net reporting-services javascript-events

我无法在任何地方找到答案,而且细节让我发疯。我的任务是更新旧的应用程序,只使用javascript作为客户端UI的东西。报告曾经使用PDF模板生成并手动循环数据集,基本上进行表单填充,然后显示报告。这已经使服务器多次崩溃。

我已经更新了应用程序以使用报表服务器,以帮助使该报表生成负载脱机。每个工作正常,除了动画GIF不会在报告返回后停止。我用:

<span id="hiddenImg" style="display: none">
<img src="" id="animate" align="middle" alt="Loading"/>
</span>

以下javascript:

function showDiv() 
  {
     document.getElementById('hiddenImg').style.display ="";  
     setTimeout('document.images["animate"].src="images/loading.gif"',100); 
  } 

哪个效果很好。在服务器端,我有类似的东西:

Response.AddHeader("Content-Type", "application/" + format);
Response.AddHeader("Content-Disposition", "attachment;filename=" + "report." + format);
data = report.GetBytes(reportpath, rbFormat.SelectedValue);    
Response.BinaryWrite(data);
Response.End();

数据是报表服务器返回的字节流。

唯一不起作用的是动画GIF即使在发布报告并且用户点击打开/保存/取消对话框后也会继续播放。我怀疑它是Response.End();调用,但即使消除行并让服务器继续运行也不能缓解这个问题。在收到报告数据后,该页面似乎没有执行任何回发,并且.html源显然显示了GIF。如果我手动回发,则会丢失打开/保存/取消对话框,用户无法显示内容。

我在这里不知所措,我已经在这几个小时了,任何帮助都表示赞赏。 谢谢你的到来。

2 个答案:

答案 0 :(得分:1)

我假设您已经想到了另一个版本的相同GIF没有动画效果的想法,并在您希望动画停止时交换它?

根据您已有的代码,只需将.src设置为非动画版本即可。在这种情况下,您还可以获得已完成状态等的好处。

另外,如果您正在调用set timeout,最好将函数引用而不是代码作为字符串传递。这样你就不需要浏览器引擎来评估运行时的代码,这些代码更慢,更难调试,并获得更好的开发支持..

例如: setTimeout(animateGif,100);

function animateGif(){   document.images [ “动画”]。SRC = “图像/ loading.gif” } function stopAnimating(){   document.images [ “动画”]。SRC = “图像/ loaded.gif” }

答案 1 :(得分:0)

在服务器端使用Response对象时,IE会以某种方式取消回发。这是奇怪的行为。

假设您拥有 GenerateReport.aspx ,其中包含btnSubmit控件和btnSubmit_Click事件处理程序。在处理程序内部,您有代码:

    //Some other codes
    Response.AddHeader("Content-Type", "application/" + format);
    Response.AddHeader("Content-Disposition", "attachment;filename=" + "report." + format);
    data = report.GetBytes(reportpath, rbFormat.SelectedValue);    
    Response.BinaryWrite(data);
    Response.End();

解决方案是:

  1. Response个对象分隔到另一个页面,例如 Report.aspx 。因此,您的 GenerateReport.aspx 不应包含任何Response个对象。所有Response个对象都在 Report.aspx
  2. btnSubmit_Click事件处理程序中,调用javascript代码打开 Report.aspx 的新窗口,如下所示:

    //Some other codes
    ClientScript.RegisterStartupScript(this.GetType(), "javascript", "window.open('../Report.aspx')", true);
    
  3. btnSubmit控件上,您应OnClientClick调用showDiv()来显示加载图片。

  4. 通过将Response对象转移到另一个页面, GenerateReport.aspx 将保留其回发,并且当您的加载图片的页面回发将消失。