Поддержка загрузки файлов и асинхронных обратных передач в GridView в UpdatePanel - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть приложение веб-формы ASP.NET со страницей, содержащей элемент управления GridView, в котором перечислены документы, загруженные пользователем.У меня есть LinkButton в одном из столбцов, который заставляет GridView вызывать событие RowCommand.CommandArgument из LinkButton - это идентификатор документа, и я выполняю следующий код:

Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-type", document.FileType);
Response.AddHeader("Content-Disposition", $"attachment;filename=\"{document.FileName}\"");
Response.AddHeader("Content-Length", document.FileContent.Length.ToString());
Response.BufferOutput = true;
Response.BinaryWrite(document.FileContent);
Response.Flush();
Response.Close();

Это работало отлично, но я также хотел поддержать подкачку в моем GridView, поэтому я установил AllowPaging = true и обернул GridView впанель обновления.Кажется, что когда я делаю это, он перестает работать, и я получаю следующее исключение:

System.Web.HttpException

Server cannot set content type after HTTP headers have been sent.

at System.Web.HttpResponse.set_ContentType(String value)
   at System.Web.HttpResponseInternalWrapper.set_ContentType(String value)
   at System.Web.UI.PageRequestManager.RenderPageCallback(HtmlTextWriter writer, Control pageControl)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.Page.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Я хочу сделать асинхронную обратную передачу для подкачки страницы GridView, но я предполагаю, что регулярная обратная передача для RowCommand.На панели обновлений не установлены триггеры, но ChildrenAsTriggers = true.

Обычно я использую HttpHandler для загрузки файлов, но я не думаю, что это вариант, так как я не хочу передавать аргументына QueryString по соображениям безопасности.Мне нравится, когда у меня есть код, выполняющий работу страницы.

Возможно ли это сделать или мне придется прекратить использование UpdatePanel и отключить подкачку страниц?

...