Response.TransmitFile和Server.Transfer

时间:2011-12-30 19:20:51

标签: c# asp.net httpresponse httpserverutility

我有一个ASP.NET应用程序,它一度生成一个PDF文件并加载下一页。我可以使用两个单独的按钮轻松完成此操作,但当我尝试使用一个按钮时,它会变得更加困难。

当两者都被同一按钮触发时,PDF将下载,但页面将不会加载。我甚至在传输文件后让线程休眠,但它会等待,但之后会停止。

我附上了我一直努力工作的代码:

Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=labels.pdf");
Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf"));
Server.Transfer("~/createshipment.aspx", true);

4 个答案:

答案 0 :(得分:1)

您不能从服务器获得两个不同的响应,但您正在尝试这样做。

首先 - 您希望服务器返回PDF。 第二 - 您希望服务器返回createshipment.aspx页面。

这只是违反通信协议。可能最好的解决方案已经由另一个用户 competent_tech 呈现 - 您可以打开一个新窗口(javascript的window.open),这个新窗口将返回PDF并同时返回主窗口可以发布到服务器并重定向到createshipment.aspx

答案 1 :(得分:1)

简而言之,您想要导航到下一页,上面写着“感谢您下载此文件”并开始下载。

你应该做的是点击你需要生成PDF并将其保存在某个地方(在磁盘或数据库上 - 在你的应用程序中更容易),存储新文件的名称/位置(或来自数据库的主键) )在会话变量中并重定向到下一页。没理由在这里转移。然后在下一页上,您应该添加一个指向已保存文件的隐藏iframe。

或者,您点击按钮可能只是指向下一页的链接,其中包含指向生成PDF的页面的隐藏iframe。这有点简单,但如果您需要将参数从原始页面传递到生成PDF的页面,则效果不会很好。

答案 2 :(得分:0)

这是因为server.transfer“...终止当前页面的执行,并通过使用页面的指定URL路径开始执行新页面。”

您最好的选择是在客户端中打开一个获取PDF的新窗口,然后执行将用户移动到下一页所需的任何回发。

答案 3 :(得分:0)

我知道这是旧的,但我只是看到了它(我自己寻找类似的信息)。

我猜这会导致问题:

Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf"));

你需要将路径映射到实际文件,而不是一些随机创建的文件名 - 或者我错过了一些步骤?