Перенаправление на страницу «Спасибо» и немедленное предложение диалога сохранения загруженного файла. - PullRequest
5 голосов
/ 16 мая 2009

Я использую ASP.NET2.0. Я создал форму загрузки с некоторыми полями ввода и кнопкой загрузки. Когда нажата кнопка загрузки, я хочу перенаправить пользователя на страницу «Спасибо за загрузку ...» и немедленно предложить ему / ей сохранить файл.

У меня есть следующий код для отображения диалога сохранения файла:

public partial class ThankYouPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("Content-Disposition", 
                          "attachment; filename=\"downloadedFile.zip\"");
        Response.ContentType = "application/x-zip-compressed";
        Response.BinaryWrite(this.downloadedFileByteArray);
        Response.Flush();
        Response.End();
    }
}

Очевидно, этот код не позволяет отображать сообщения с благодарностью. Есть ли событие «AfterRender» или что-то похожее на страницу, где я мог бы переместить этот код загрузки и дать возможность странице передать сообщение «спасибо» пользователю? В конце концов, я им искренне благодарен, поэтому хочу это выразить.

Ответы [ 5 ]

6 голосов
/ 16 мая 2009

Вы можете сослаться на страницу загрузки со своей страницы благодарности, используя IFrame

<iframe src="DownloadFile.aspx" style="display:none;" />

В этом случае DownloadFile.aspx будет иметь код из вашего примера.

1 голос
/ 16 мая 2009

, если вы хотите открыть страницу «Спасибо» и файл, который клиент должен дважды вызвать на сервере. Таким образом, вы можете просто создать страницу thankyou.aspx для отображения сообщения (и, возможно, поставить прямую ссылку на скачивание файла). Вы можете начать загрузку с метатега или просто с помощью js (даже ms делают то же самое для их страницы загрузки).

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

Файл должен быть отправлен клиенту с Response.TrasmitFile

1 голос
/ 16 мая 2009

Код, который вы написали, на самом деле должен быть перенаправлен со страницы «спасибо» (что делает его вторым перенаправлением). Поскольку вы установили расположение содержимого как вложение, эта страница фактически не заменит существующую страницу с благодарностью.

1 голос
/ 16 мая 2009

Используйте тег META REFRESH в начале своей страницы благодарности:

<META http-equiv="refresh" content="1;URL=http://site.com/path/to/downloadedFile.zip"> 

В качестве альтернативы вы можете использовать функцию body onLoad для замены текущего местоположения URL-адресом для загрузки.

<body onLoad="document.location='http://site.com/path/to/downloadedFile.zip'">

В этом случае перенаправление начнется после , когда текущая страница закончила загрузку и только если на клиенте включен JavaScript, поэтому не забудьте включить ссылку со ссылкой для загрузки («Если загрузка не начать через несколько секунд ... "и т. д.).

Вы также можете использовать IFRAME, как предложено Филом, или даже FRAME или всплывающее всплывающее окно (блокируется, обратите внимание). Ваш пробег может отличаться.

0 голосов
/ 16 мая 2013

Пожалуйста, проверьте следующую ссылку, это может помочь вам решить вашу проблему.

В Asp.net, при нажатии кнопки, как открыть диалог загрузки, а затем перенаправить пользователя на другую страницу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...