重定向到“感谢”页面并立即提供下载文件的保存对话框

5

我正在使用ASP.NET2.0。我创建了一个下载表单,其中包含一些输入字段和一个下载按钮。当用户点击下载按钮时,我想将用户重定向到一个“感谢您下载......”页面,并立即提供文件以保存。

我有以下代码来显示保存文件对话框:

public partial class ThankYouPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("Content-Disposition", 
                          "attachment; filename=\"downloadedFile.zip\"");
        Response.ContentType = "application/x-zip-compressed";
        Response.BinaryWrite(this.downloadedFileByteArray);
        Response.Flush();
        Response.End();
    }
}

显然,此代码无法显示任何“谢谢”消息。页面是否有“AfterRender”事件或类似的事件,我可以将此下载代码移动到该事件中,并给页面渲染“感谢您”的机会呢?毕竟,我真的很感激他们,所以我想表达这一点。
5个回答

6
您可以在感谢页面上使用IFrame引用下载页面。
<iframe src="DownloadFile.aspx" style="display:none;" />

在这种情况下,DownloadFile.aspx将具有您示例中的代码后端。

1
在您的感谢页面头部使用META REFRESH标签:
<META http-equiv="refresh" content="1;URL=http://site.com/path/to/downloadedFile.zip"> 

或者,您可以使用一个body onLoad函数来用下载URL替换当前位置。

<body onLoad="document.location='http://site.com/path/to/downloadedFile.zip'">

在这种情况下,重定向将在当前页面完成加载后开始,并且仅在客户端启用JavaScript时才会发生,因此请记得包含一个带有下载链接的链接(“如果您的下载没有在几秒钟内开始…”等等)。
您还可以像Phil建议的那样使用IFRAME,甚至是FRAME或完整的弹出窗口(请注意,它们可能会被阻止)。您的里程可能会有所不同。

1
你编写的代码实际上应该从“谢谢”页面进行重定向(使其成为第二个重定向)。因为你将内容设置为attachment,所以此页面实际上不会替换现有的“谢谢”页面。

1

如果您想提供一个“感谢”页面并且客户端必须调用服务器两次文件,那么您可以创建 thankyou.aspx 页面来显示消息(并可能放置一个直接下载链接到文件)。您可以使用 meta 标签或仅使用 js 开始下载(即使微软也会在其下载页面上执行相同操作)。

然后,为了提供文件,您应该创建一个直接链接以避免服务器上运行另一个页面;否则,您应该创建一个 HttpHandler 来隐藏文件系统。

文件应该使用 Response.TrasmitFile 发送给客户端。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接