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

时间:2010-09-09 13:01:50

标签: c# web-applications gridview response response.redirect

我正在将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(),我将被重定向但是文件永远不会生成,如果我把响应.Redirect()放在.End()之后我获取文件但没有重定向。

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

7 个答案:

答案 0 :(得分:8)

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

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

如果3是延迟时间且index.html是url,则需要重定向到

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您无法同时打开这两项内容,因此您可能需要尝试在新窗口中设置生成的xls文件的链接,或者作为iframe的源代码

答案 3 :(得分:0)

在JavaScript中:

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

按钮:

<td valign="top" style=" width:100px ">
<asp:Button runat="server" ID="btnX" Text="X" CssClass="ui-button ui-widget ui-state-default ui-corner-all ui-button-text ui-state-hover" OnClientClick="refresh();"  Width="180px" />
</td>

答案 4 :(得分:0)

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

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

string strScript = "<script language='javascript'> window.open('CommonDownload.aspx','Report');</script>";
ScriptManager.RegisterStartupScript(Page, this.GetType(), "clientScript", strScript, false);
Response.Redirect("Page.aspx");

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

答案 5 :(得分:0)

我将target="_blank"添加到了将我带到页面的链接。因此,当它在新窗口中打开时,它会向浏览器发送excel工作表,并关闭页面,因为Response.End();

之后它无事可做

希望这会有所帮助。为我工作。

答案 6 :(得分:0)

OnClientClick 调用此方法会自动刷新。

 function PageRefresh() {
        setTimeout(function () {
            window.location.reload(1);
        }, 5000);
    }