2015-04-06 95 views
0

要求: 我想下載一個文件(* .docx),點擊一個按鈕,首先讀取文件的字節,然後我寫入字節到響應,這工作正常,我已經多次使用此代碼,但我得到這種奇怪的行爲,代碼成功執行,沒有例外,但沒有響應被髮回到客戶端(沒有發生,沒有響應,沒有文件下載),此外,如果我把代碼放在Page_Load事件中,代碼完美地工作,它只在按鈕單擊事件(即回發)中不起作用,下面是我正在使用的代碼:將二進制寫入響應後回發中沒有響應

Dim arrBytes() = File.ReadAllBytes(strFilePath) 
Response.ClearHeaders() 
Response.ContentType = "application/octet-stream" 
Response.Clear() 
Response.AddHeader("Content-Disposition", "attachment; filename=test.docx") 
Response.AddHeader("Content-Length", arrBytes.Length.ToString()) 
Response.BinaryWrite(arrBytes) 
Response.Flush() 
Response.SuppressContent = True 
HttpContext.Current.ApplicationInstance.CompleteRequest() 

任何幫助非常感謝。

編輯: 我試過'Response.WriteFile,而不是Response.BinaryWriteResponse.End代替ApplicationInstance.CompleteRequest但沒有成功。

+0

你叫Response.Close():

所以我用這行代碼在Page_Load事件解決它? – OldProgrammer

+0

@OldProgrammer Response.Close()的[documentation](https://msdn.microsoft.com/en-us/library/system.web.httpresponse.close%28v=vs.110%29.aspx) 。在我看來,這並不意味着直接使用。 – mason

+0

@OldProgrammer不,我從來沒有調用過'Response.Close' –

回答

0

原來在MasterPage中有一個UpdatePanel,當我將該按鈕註冊爲回發控件時,問題得到了解決......這讓我很痛苦。

ScriptManager.GetCurrent(Me).RegisterPostBackControl(btnSubmit)