Я создал аналогичный унаследованный элемент управления GridView с возможностью экспорта в CSV.То, как я это обработал, - сделать кнопку экспорта простым <a href>
на текущей странице со специально созданным параметром строки запроса "?SortablePagableGridViewExportToCSV=XXX"
, где XXX - это UniqueID
моего элемента управления.Я переопределяю метод Render моего элемента управления, и там я проверяю параметры запроса вручную, чтобы увидеть, был ли отправлен этот параметр экспорта.Если это так, я пишу заголовок и ответ типа контента CSV, как показано ниже.
Me.Page.Response.Clear()
Me.Page.Response.ClearContent()
Me.Page.Response.ClearHeaders()
Me.Page.Response.ContentType = "text/csv"
Me.Page.Response.AddHeader("Content-Disposition", "attachment;filename=" & Me.ExportToCsvFileName)
Me.Page.Response.End()
Ключ - это вызов Page.Response.End()
, который останавливает всю дальнейшую обработку.Это запрос GET, поэтому мне не нужно беспокоиться об асинхронных обратных передачах UpdatePanel или о чем-либо подобном.Браузер ведет себя прекрасно в этой ситуации, выскакивает ссылку на скачивание, но держит пользователя на текущей странице.URL-адрес браузера не изменяется, и пользователь может даже щелкнуть правой кнопкой мыши ссылку для загрузки и использовать «Сохранить объект как ...», если он этого желает.