2016-07-05 101 views
0

我正在使用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.請讓我知道是否需要更多信息。謝謝。

回答

0

當下載按鈕被點擊時,你確定沒有javascript/jquery錯誤發生,以防止重新點擊PDF按鈕,並進入編輯模式? 尤其是因爲刷新頁面會使所有的工作重新開始。

+0

我啓用了打破所有異常(在IE中)的選項,但我沒有看到任何JavaScript錯誤被拋出。我注意到如果我刪除了所有的響應代碼,那麼事件就會一直被觸發。 – Frederic