PDF下载后重定向页面

时间:2010-02-18 13:40:53

标签: c# asp.net redirect download

我有一个aspx(比如1.aspx)页面,首先我下载pdf文件,然后我想重定向到一些Thanks.aspx页面。代码是这样的:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string pathId = string.Empty;
    if (Page.IsValid)
    {
        try
        {    
            pathId = hidId.Value;
            DownloadPDF(pathId);                        

            Response.Redirect("Thanks.aspx");
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}



protected void DownloadPDF(string pathId)
{
    if (!(string.IsNullOrEmpty(pathId)))
    {
         try
        {
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + pathId + ".pdf");
            string path = ConfigurationManager.AppSettings["Pdf_Path"].ToString() + "\\" + pathId.Trim() + ".pdf";
            Response.TransmitFile(path);                   
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }
    }
}

问题在于,文件保存对话框正常运行,我也可以下载该文件,但它没有被重定向到Thanks.aspx页面。

如何解决这个问题?

6 个答案:

答案 0 :(得分:6)

我发现将PDF下载页面放在iframe中会更容易。这样,只需将iframe源指向PDF下载页面,即可在客户端激活PDF下载。之后,您可以移动到新页面,也可以只在页面中显示iframe中的iffe文本。

答案 1 :(得分:4)

如果刚刚下载文件,没有进行预处理,您可以尝试以下操作:

Response.AddHeader("Refresh", "12;URL=nextpage.aspx");

其中数字是刷新前的秒数:)

答案 2 :(得分:1)

在HTTP中,请求只能有一个响应。由于第一个响应是PDF文件,因此无法实现秒响应(即重定向)。

您可以尝试通过重定向到thanks.aspx来重新设计这两个页面,并让thanks.aspx自动开始下载。

答案 3 :(得分:0)

Response.Redirect实际上向浏览器发送响应,该响应基本上表示此资源已移至其他URL。但是,你也试图在响应中发送文件,所以这两件事可能会相互冲突。尝试发回一些JavaScript,将它们发送到您要发送给它们的页面,而不是使用Response.Redirect。

ScriptManager.RegisterStartupScript(Me, Me.GetType(), "redirectScript", "window.location.href='whateverurlhere.aspx';", True)

答案 4 :(得分:0)

请参阅此接受答案中提到的文章:https://stackoverflow.com/a/11018277/1037864 (直接链接:http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/

想法是设置一个cookie并将其与文件一起发送。同时,让等待页面在等待cookie到达时阻止UI。

答案 5 :(得分:0)

我尝试了很多方法(比如这里的想法),但没有任何方法适合我的特定情况。最后,我使用了一种方法,其中我的 C# 设置了 JavaScript 查找的 cookie,并相应地禁用表单按钮/等,直到检测到 cookie。

我的代码在这里,以防有人认为此解决方案可能适合您: https://gist.github.com/cemerson/9811a384d7f41bc683b2bd9ed4bf5b17