我正在使用SharePoint 2013網站,並添加了以PDF格式保存網頁的功能。 PDF轉換由第三方庫SelectPdf處理。 除了在我的頁面上使用的「PDF下載」按鈕只能執行一次外,我設法讓所有內容都能正常工作(渲染和文件下載)。意思是,無論我點擊多少次按鈕(注意,我以10+秒的間隔點擊它),後面的代碼上的點擊事件只會觸發一次。如果我想再次下載PDF文件,我必須刷新頁面。 我放在一起的「Hello World」的例子(見下文),以查明問題:ASP.NET「application/pdf」:代碼只運行一次
protected void lnkPdfDownload_Click(object sender, EventArgs e)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=test.pdf");
/************************************ Create PDF File ************************************/
string html = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html dir=""ltr"" lang=""en-US"">
<body><h1>Hello World</h1></body>
</html>";
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertHtmlString(html);
byte[] bytes = doc.Save();
Response.OutputStream.Write(bytes, 0, bytes.Length); // ALTERNATIVE: doc.Save(Response.OutputStream);
/************************************ Create PDF File ************************************/
//Response.End(); // This throw a ThreadAbortException, therefore I'm using the alternative code below
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
當時我還以爲是Response.End()
引起的問題(拋ThreadAbortException)開始,但我取代它與其他代碼,我仍然有同樣的問題(現在沒有例外拋出)。我不認爲問題出現在SelectPdf庫中:我可以註釋掉整個塊(在「創建PDF文件」註釋之間),並且我仍然會得到相同的結果(顯然不會生成PDF)。
我注意到,我最多可以成功點擊2次「下載」按鈕(這很少見,也不一致):第三次沒有任何反應。
雖然這不是一個大問題,但我認爲我看不到有什麼問題。這是爲什麼:在我點擊「下載」按鈕(並獲取我的PDF文件)後,我無法繼續在我的SharePoint頁面中進行編輯模式。 「加載」消息不斷旋轉,但沒有任何反應(再次,除非我刷新頁面)。
有沒有人有這個問題?我在網上查找,但我無法找到任何有關它。 我使用Internet Explorer 11和Chrome 51.請讓我知道是否需要更多信息。謝謝。
我啓用了打破所有異常(在IE中)的選項,但我沒有看到任何JavaScript錯誤被拋出。我注意到如果我刪除了所有的響應代碼,那麼事件就會一直被觸發。 – Frederic