此代码总会让我的aspx页面加载两次。而这已经无关AutoEventWireup。

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = GetDocument(doclocation);
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

此代码只会让我的网页加载一次(因为它应该)当我硬编码了一些虚值。

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = new byte[] {10,11,12,13};
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

我也增加了好措施请求长度在web.config文件。

<httpRuntime executionTimeout="180" maxRequestLength="400000"/>

还是什么都没有。任何人看到的东西我不?

有帮助吗?

解决方案

你有没有找到解决这个吗?有同样的问题我,我的代码几乎是你的一面镜子。主要的区别是我的PDF是在一个iframe主办。

如此有趣的线索,我发现: 如果我流回它只被加载一次WORD.DOC,如果PDF它被加载两次。另外,我已经看到了来自不同客户端桌面不同的行为。我想到的Adobe版本可能有事情做吧。

<强>更新

在我的情况下,我设置HttpCacheability为nocache。在验证此,任何非客户端高速缓存选项将导致PDF的双重下载。只有不设置它在所有(默认为私人)或明确将其设置为私人或公众会解决这个问题,所有其他设置复制文档的双重负担。

其他提示

GetDocument(doclocation);

可能此方法以某种方式将返回重定向代码?或者可以是用于动态内容的iframe或IMG?

如果是这样:

在一般的控制可能被调用,因为链接响应的两倍。首先,它呈现的内容。之后,您的浏览器尝试下载代码(iframe,IMG)来源实际上是生成动态内容。因此,它是另一个请求到Web服务器。在这种情况下另一个页面对象创建具有不同视图状态,因为它是一个不同的请求。

快速猜测:会不会是在这个阶段在页面生命周期,包含GetDocument()的类已经通过垃圾回收到哪里去了?然后ASP.NET工作过程需要重新加载该页面,以便再次读取方法?

你有没有试过在Page_Load?以及为何GetDocument一个静态方法?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top