2

我有一个 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

4 回答 4

1

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

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

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

于 2011-12-30T19:38:27.440 回答
1

因此,简而言之,您希望导航到显示“感谢您下载此文件”之类的下一页并开始下载。

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

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

于 2011-12-30T20:09:35.593 回答
0

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

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

于 2011-12-30T19:27:35.060 回答
0

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

我猜这会导致问题:

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

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

于 2013-02-07T18:05:01.453 回答