2015-04-06 90 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)