2011-01-28 42 views
3

我有一個按鈕,點擊後會生成一個PDF並將其寫入響應。有沒有辦法在向響應寫出文件後完成回發?

這是代碼的基本結構:

try 
{ 
    using(Stream stream = generatePdf()) 
    { 
     var file = createFile(stream); 
     file.Transmit(HttpContext.Current.Response); 
    } 
} 
catch (Exception ex) 
{ 
    // Handle exception 
    // Display Error Message 
} 

的發送方法包含以下代碼:

response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", filename)); 
response.AddHeader("Content-Length", bytes.Length.ToString()); 
response.ContentType = "application/octet-stream"; 
response.BinaryWrite(bytes); 

下載文件工作正常,但它沒有完成回傳。

如果我在file.Transmit以上拋出異常,錯誤處理將正常工作,並且我會看到該消息顯示在瀏覽器中。但是,如果file.Transmit之後出現異常,則不會發生任何情況。用戶保存/打開PDF,頁面不會重新加載。

我該如何使回發總是完成,這樣我才能向用戶顯示相應的消息?

回答

4

這聽起來像你想做出響應包含兩個部分,我的問題螺紋:頁面的PDF。你不能那樣做。通常情況下,下載頁面會在您去過它們(通過JavaScript,我相信)時以一個單獨的請求開始下載,並提供直接鏈接以防止JavaScript不起作用。

任何一個HTTP請求只能有一個響應。

1

Response.End()從字面上結束整個響應。

有跡象表明,我使用當我使用它的兩種方法:

1)一定要確保它在回傳最終需求點。

2)(以及使用AJAX進行文件調用的唯一方法)在iframe中創建一個小頁面,僅用於發送文件和調用幀的刷新... response.end將僅結束來自該框架的響應,而不是整個回發。

編輯:下面是關於同一主題的 Using Response.TransmitFile for physical file not working

相關問題