我有一个要求,其中我需要在执行excel报告时显示等待消息,并且当执行完成时,将excel写入响应以供用户保存。保存完成后,我需要隐藏等待消息。
我能够显示等待消息但是在执行完成时我无法隐藏相同的消息。我用过Ifames来实现同样的目标。 我在iframe中执行excel所需的所有处理,并在同一个iframe中写入响应。我试图使用Javascript隐藏等待消息,但是在iframe的onload,onunload,onbeforeunload等中编写的任何JavaScript函数都没有被执行。
有什么方法可以调用JavaScript函数,或者是否有其他方法来解决问题。
答案 0 :(得分:4)
以下是我如何做到这一点:
作为旁注,这在ASP.NET MVC中会更直接一些
GenerateDocument HttpHandler存根:
public class GenerateMyDocumentHandler : IHttpHandler
{
#region [ IHttpHandler Members ]
public Boolean IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
var docIdentifier = this.GenerateDocument();
context.Response.ContentType = "text/plain";
context.Response.Write(docIdentifier.ToString("N"));
}
#endregion
private Guid GenerateDocument()
{
var identifier = Guid.NewGuid();
// Logic that generates your document and saves it using the identifier
return identifier;
}
}
客户端脚本存根:
function generateDocument() {
var result = $.get('/GenerateDocument.ashx', { any: 'parameters', you: 'need', go: 'here' }, generateDocumentCallback, 'text');
// display your waiting graphic here
}
function generateDocumentCallback(result) {
window.location.href = '/RetrieveDocument.ashx/' + result;
}
RetrieveDocument HttpHandler存根:
public class RetrieveDocument : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var identifier = new Guid(context.Request.Url.Segments[1]);
var fileContent = this.GetFileAsBytes(identifier);
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AddHeader("Content-Disposition", "attachment; filename=yourfilename.xls");
context.Response.OutputStream.Write(fileContent, 0, fileContent.Length);
}
private Byte[] GetFileAsBytes(Guid identifier)
{
Byte[] fileBytes;
// retrieve the specified file from disk/memory/database/etc
return fileBytes;
}
public Boolean IsReusable
{
get
{
return true;
}
}
}
答案 1 :(得分:2)