Response.BinaryWrite()适用于一个页面,而不适用于另一个页面

时间:2011-09-21 13:58:59

标签: c# asp.net download httpresponse

我在类库中有一个辅助函数,用于创建和提供自定义PDF:

byte[] file = GetPdfBytesFromHtmlString( htmlCodeToConvert );

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader( "Content-Type", "binary/octet-stream" );
response.AddHeader( "Content-Disposition", "attachment; filename=" + filename + "; size=" + file.Length.ToString() );
response.Flush();
response.BinaryWrite( downloadBytes );
response.Flush();
response.End();

当在一个页面上执行此代码时,一切正常。另一个页面大部分是相同的,唯一的区别是要写入PDF的HTML输出,我已经验证它正常工作。然而,没有任何反应。我已经介入了代码,它只是采用了它的快乐方式,但是浏览器没有提示下载。

我知道我要留下很多代码,但因为它在一个实例而不是另一个实例中工作,我很难过并且正在寻找寻求解决方案的想法。

4 个答案:

答案 0 :(得分:1)

我真的很讨厌回答我自己的问题,因为这意味着我在问之前没有做足够的研究。但是,我正在审查它,并意识到我只在Firefox中测试过。在IE中运行它暴露了一个脚本错误,其中包含文本“错误解析'%PDF - 1.4%',我在搜索时看到但没有跟进。

问题是不工作的页面使用了AJAX更新面板,当我说代码完全相同时,我没有意识到这一点。导出按钮单击代码是,但标记不是。

this post中的第二个回复包含一些其他信息和解决方法。

答案 1 :(得分:0)

你创建的字节数组在代码中被称为文件,但你二元写入'downloadbytes' - 这是问题吗?

答案 2 :(得分:0)

如果问题是更新面板,那么您需要做的就是为调用该功能的控件添加一个完整的回发触发器。

答案 3 :(得分:0)

我能够通过在更新面板中添加触发器来解决此问题。

<Triggers>
    <asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>