2013-06-24 76 views
2

在我的應用程序需要下載一個文件,所以我使用這段代碼:到Response.End()拋出Error

Response.ContentType = "application/octet-stream";      
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls"); 
Response.TransmitFile(strFilePath); 
Response.End(); 

Response.End()我得到一個錯誤ThreadAbortException

要aviod這個錯誤我想使用httpApplication.CompleteRequest(), ,但我不能也使用這個。

與httpApplication.CompleteRequest代碼()低於,

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls"); 
Response.TransmitFile(strFilePath); 
HttpApplication.CompleteRequest(); 

我m到處IM使用時

An object reference is required for the non-static field, method, or property 'System.Web.HttpApplication.CompleteRequest()' 

我希望IM能夠讓我懷疑這個錯誤HttpApplication.CompleteRequest()清除... 幫我出去....

+0

究竟什麼是你的'ThreadAbortException'的信息解決呢? –

+0

這是錯誤 「無法評估表達式,因爲代碼已優化或本機框架位於調用堆棧之上」 – salah9

+0

您可以使用通用處理程序(.ashx文件)來提供文件,而不是從aspx頁面。 – user1429080

回答

6

Response.End()預計會拋出ThreadAbortException
這是有意設計的,這樣頁面響應的其餘部分就不會被處理。

獲得此異常是完全可以的,它將確保頁面不會被進一步處理。

參見:HttpResponse.End

的CompleteRequest方法不會引發異常,和代碼 後可能會執行到CompleteRequest方法調用。如果您的意圖是爲了避免執行後續代碼,並且End的性能損失可接受,那麼可以調用End而不是 CompleteRequest。

3

試試這個代碼:

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", "attachment; filename =" + strFileName + ".xls"); 
Response.TransmitFile(strFilePath); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
0

只是註釋此行,你去好:

//Response.End(); 

它爲我:)

0

錯誤occures因爲你使用的是ASP更新面板或控制使用JavaScript的。嘗試使用ASP或HTML原生控件,無需JavaScript或ScriptManager或腳本。

0

我也遇到過這個問題,並用下面的代碼

ScriptManager sm = ScriptManager.GetCurrent(this.Page); 
       sm.RegisterPostBackControl(this.grid); 
相關問題