Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Response.TransmitFile和Server.Transfer_C#_Asp.net_Httpresponse_Httpserverutility - Fatal编程技术网

C# Response.TransmitFile和Server.Transfer

C# Response.TransmitFile和Server.Transfer,c#,asp.net,httpresponse,httpserverutility,C#,Asp.net,Httpresponse,Httpserverutility,我有一个ASP.NET应用程序,可以在某个点生成PDF文件并加载下一页。我可以很容易地用两个单独的按钮来做这件事,但当我试着用一个按钮来做这件事时,它变得更难了 当两个按钮都被同一个按钮触发时,PDF将被下载,但页面不会被加载。我甚至在文件传输后让线程休眠,但它会等待,然后停止 我已经附上了我一直在努力工作的代码: Response.ContentType = "application/pdf"; Response.AppendHeader("Content-Disposition", "att

我有一个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);
这是因为“…通过使用页面的指定URL路径终止当前页面的执行并开始新页面的执行”


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

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

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


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

,因此简而言之,您希望导航到下一页,上面写着“感谢您下载此文件”,然后开始下载

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


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

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

我猜这会引起一些问题:

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

您需要将路径映射到实际文件,而不是一些随机创建的文件名,或者我缺少一些步骤?

您可以尝试Response.Write而不是Server.Transfer。您还可以移动到下一页并初始化。从那里下载。为什么它下载文件,休眠,然后停止加载下一页。这看起来确实很奇怪。是否向事件日志报告了任何异常?听起来页面本身似乎有错误。你可以查看页面的来源,看看它在哪里停止书写;这可能会给你一个线索。这真的不是问题。该文件是在代码的前面动态创建的。randomNumber在作用域内有时在作用域外返回相同的数字。