在C#中调用Response.End()后重定向到另一个页面

我正在将webview导出为ex​​cel,在Web应用程序中使用.Net 4.0,在页面加载时需要生成文件,然后将页面重定向到调用页面。 我遇到了问题,因为我导出到excel的代码如下:

gvSummary.Style.Add("font-size", ".6em"); Response.Clear(); string attachment = "attachment; filename=filename.xls"; Response.ClearContent(); Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); gvSummary.GridLines = GridLines.Horizontal; gvSummary.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); 

我知道如果我在.End()之前放置Response.Redirect(),我将被重定向但是文件永远不会生成,如果我在.End()之后放置Response.Redirect()我得到文件但没有重定向。

上面编写的代码在生成文件时效果很好,但是在生成文件之后,我仍然看不到我的加载动画,因为我无法突破页面。 有任何想法吗?

我建议添加重定向标头。 像这样的东西:

 Response.AddHeader("Refresh", "3; url=index.html"); 

其中3是延迟时间,index.html是url,您需要重定向到

问题是Response.End()将页面的最后几位发送到客户端以完成请求。 在您的情况下,请求包含该文件。

一种可能的解决方案是打开下载的新页面并将重定向保留在当前页面中。

你不能同时打开这两个你可能想尝试在新窗口中设置生成的xls文件的链接或作为iframe的源

在JavaScript中:

 function refresh() { document.location.reload(true); } 

按钮:

    

我尝试通过ScriptManager打开一个单独的页面,该页面将在我的原始页面中进行重定向时下载我的文件。

所以我在主页面中添加了以下代码:

 string strScript = ""; ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false); Response.Redirect("Page.aspx"); 

然后在我的CommonDownload页面的Page_Load方法中添加下载代码。 我通过会话传递了CommonDownload页面中我需要的一些信息。

我将target="_blank"到了将我带到页面的链接。 因此,当它在新窗口中打开时,它会将excel表格发送到浏览器,并关闭页面,因为它在Response.End();之后没有其他任何操作Response.End();

希望这可以帮助。 为我工作。