Response.Write/Response.BinaryWrite and File Download problem in UpdatePanel
(Solution to Sys.WebForms.PageRequestManagerParserErrorException)
You may face problem when you write download file logic in aspx page code behind while the the control that fires the event to download file is in update panel. If you use Response.Write() or Response.BinaryWrite() method as shown below in async postback you will encounter Sys.WebForms.PageRequestManagerParserErrorException.
Page’s markup
1.<asp:scriptmanager id="ScriptManager1" runat="server">2.asp:scriptmanager>3.<asp:updatepanel id="UpdatePanel1" runat="server">4.<contenttemplate>5.<asp:button id=" ButtonDownload" runat="server"onclick="ButtonDownload_Click" text="Download"> >6.asp:button>contenttemplate>7.asp:updatepanel>Page’s Code behind
01.protected void ButtonDownload_Click(object sender, EventArgs e)02.{03.string fileName = "song.wav";04.string filePath = "Audio/song.wav";05.Response.Clear();06.Response.ContentType = "audio/mpeg3";07.Response.AppendHeader("Content-Disposition","attachment; filename=" + fileName);08.string fileSeverPath = Server.MapPath(filePath);09.if (fileSeverPath != null)10.{11. 12.byte[] fileBytes = GetFileBytes(fileSeverPath);13. 14.Response.BinaryWrite(fileBytes);15. 16.Response.Flush();17.}18.}19.protected byte[] GetFileBytes(string url)20.{21.WebRequest webRequest = WebRequest.Create(url);22.byte[] fileBytes = null;23.byte[] buffer = new byte[4096];24.WebResponse webResponse = webRequest.GetResponse();25.try26.{27.Stream stream = webResponse.GetResponseStream();28.MemoryStream memoryStream = new MemoryStream();29.int chunkSize = 0;30.do31.{32.chunkSize = stream.Read(buffer, 0, buffer.Length);33.memoryStream.Write(buffer, 0, chunkSize);34.} while (chunkSize != 0);35.fileBytes = memoryStream.ToArray();36. 37.}38.catch (Exception ex)39.{40.Response.Write(ex.Message);41.}42. 43.return fileBytes;44.}Here is it. Enjoy!