Начать загрузку файла после обратной передачи

В моем приложении я создаю zip-файл, который пользователь может загрузить для некоторой экспортированной информации из базы данных. ZIP-файл создается, когда пользователь нажимает кнопку «сгенерировать данные», и я регистрирую запрос в базе данных.

На моей странице, У меня есть Gridview, который показывает историю загрузок пользователя, а также предлагает им возможность загружать последний сгенерированный файл в течение заданного периода времени.

Проблема, с которой я сталкиваюсь, заключается в том, что когда они нажимают кнопку, я хочу, чтобы страница обновлялась (таким образом, обновлялась сетка и отображался их последний запрос), а затем начиналась загрузка файла для них (IE, вывести приглашение и пусть решают, открывать / сохранять / отменять).

Я могу начать загрузку в ответ на сообщение, но мой Gridview не обновляется до начала, поэтому он не отображает самый новый запрос в списке. Как я могу заставить сетку обновляться ДО начала загрузки?

Я использую следующее, чтобы начать загрузку:

    public void BeginDownload()
    {
        FileDownload download = InventoryService.GetLastThreeFileDownloads(this.EmployeeId).First();
        FileInfo fi = new FileInfo(Server.MapPath(SERVER_DOWNLOAD_PATH) + download.DownloadFileName);

        Response.Clear();
        Response.ContentType = "application/zip";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + fi.Name);
        Response.TransmitFile(fi.FullName);
        Response.Flush();
    }

Метод вызывается в событии Page_Load как последний элемент, если для скрытого поля установлено значение true (которое я устанавливаю, когда они нажимают кнопку для создания файла).

Я также пробовал делать это с помощью вызовов jQuery / AJAX, чтобы обновить страницу и начать загрузку без особого успеха . Я подумал об открытии модального диалогового окна и разрешении им щелкнуть ссылку, чтобы начать загрузку, а затем обновить страницу, когда модальное окно закроется, но это последнее средство, если я не могу найти другое решение.

Любая помощь приветствуется !

6
задан Delebrin 7 February 2011 в 20:50
поделиться