将二进制写入响应后回发中没有响应
问题描述:
要求: 我想下载一个文件(* .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.BinaryWrite
和Response.End
代替ApplicationInstance.CompleteRequest
但没有成功。
答
原来在MasterPage中有一个UpdatePanel,当我将该按钮注册为回发控件时,问题得到了解决......这让我很痛苦。
ScriptManager.GetCurrent(Me).RegisterPostBackControl(btnSubmit)
你叫Response.Close():
所以我用这行代码在
Page_Load
事件解决它? – OldProgrammer@OldProgrammer Response.Close()的[documentation](https://msdn.microsoft.com/en-us/library/system.web.httpresponse.close%28v=vs.110%29.aspx) 。在我看来,这并不意味着直接使用。 – mason
@OldProgrammer不,我从来没有调用过'Response.Close' –