2011-05-08 63 views
3

我一直在嘗試使用ASP.Net將Word文檔導出爲Response。所以我用這段代碼實現了這個目標。導出文檔後響應關閉

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.ContentEncoding = Encoding.UTF8; 
Response.Charset = "UTF-8"; 
Response.Buffer = true; 

this.EnableViewState = false; 
Response.ContentType = "application/msword"; 
Response.AddHeader("content-disposition", "attachment;filename=ExportedData" + Guid.NewGuid().ToString().Remove(5) + ".docx"); 

var wordData = this.RequestService.ExportToWord(this.RequestItem); 

Response.BinaryWrite(wordData); 
Response.Flush(); 

//Response.Clear(); 
//Response.End(); 
//Response.Close(); 
//RedirectToSamePage(); 
//Response.Flush(); 

但問題是,當用戶將頁面導出爲word文檔時,頁面的其他功能消失。像,你不能點擊另一個ASP控件,因爲結束Response對象,殺死了ASP控件與DLL的連接。因此,從註釋代碼中可以看到,我一直在調用一些Response對象函數,但仍然無法管理其他ASP控件在導出操作後工作。那麼,我該如何管理呢?

在此先感謝。

回答

3

您正在獲取此行爲,因爲您正在更改當前頁面的響應對象。由於頁面回發,響應對象用於呈現當前爲Word二進制內容的最新頁面內容。

我會建議你做下面的一個:

  • 帶來了一個新的頁面,並實施新的頁面上,上面的代碼推Word文檔
  • 有一個iframe(您可能不想要顯示它)並將源設置爲將推送Word內容的頁面。這將允許您保持當前頁面而不會干擾流量。
+0

謝謝。會做到這一點。 – 2011-05-08 13:57:08

0

我會做第二頁,並把所有的文字輸出的東西在第二頁。然後,在原始的aspx頁面中,對此新頁面或者window.location執行response.redirect,新頁面將簡單地回傳文檔。這樣用戶停留在原始頁面上,一切正常。

我建議在重定向到新頁面之前使用會話來獲取您需要的任何參數以生成word文檔。但是,查詢字符串也可以工作。

+0

也會這樣做。 – 2011-05-08 13:57:20

+0

'function postExport(){ window.WebForm_OnSubmit = function() {return true; }; }' – 2011-05-10 06:22:06

相關問題