簡體   English   中英

Response.BinaryWrite() 適用於一頁,而不適用於另一頁

[英]Response.BinaryWrite() works for one page, not another

我在創建和提供自定義 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 輸出,我已經驗證它可以正常工作。 然而,什么也沒有發生。 我已經逐步完成了代碼,它只是按照自己的方式進行,但是瀏覽器沒有提示下載。

我知道我遺漏了很多代碼,但是因為它在一個實例中而不是另一個實例中工作,所以我很難過,正在尋找尋求解決方案的想法。

我真的很討厭回答我自己的問題,因為這意味着我在提出問題之前沒有做足夠的研究。 但是,我正在查看它並意識到我只在 Firefox 中進行了測試。 在 IE 中運行它會暴露一個腳本錯誤,其中包含文本“Error parsing near '%PDF - 1.4%' 我在搜索時看到但沒有跟進。

問題是不工作的頁面使用了 AJAX 更新面板,當我聲明代碼相同時我沒有意識到。 導出按鈕單擊代碼是,但標記不是。

這篇文章中的第二個回復包含一些附加信息和解決方法。

如果問題出在更新面板上,那么您需要做的就是為調用該函數的控件添加一個完整的回發觸發器。

我能夠通過在我的更新面板中添加一個觸發器來解決這個問題。

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

您創建的字節數組在代碼中稱為文件,但您二進制寫入 'downloadbytes' - 這是問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM