Перенаправление страницы после загрузки PDF - PullRequest
4 голосов
/ 18 февраля 2010

У меня есть страница aspx (скажем, 1.aspx), с которой сначала я загружаю файл PDF, а затем хочу перенаправить на какую-нибудь страницу Thanks.aspx. Код такой:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string pathId = string.Empty;
    if (Page.IsValid)
    {
        try
        {    
            pathId = hidId.Value;
            DownloadPDF(pathId);                        

            Response.Redirect("Thanks.aspx");
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}



protected void DownloadPDF(string pathId)
{
    if (!(string.IsNullOrEmpty(pathId)))
    {
         try
        {
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + pathId + ".pdf");
            string path = ConfigurationManager.AppSettings["Pdf_Path"].ToString() + "\\" + pathId.Trim() + ".pdf";
            Response.TransmitFile(path);                   
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            HttpContext.Current.ApplicationInstance.CompleteRequest();
        }
    }
}

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

Как решить эту проблему?

Ответы [ 5 ]

6 голосов
/ 18 февраля 2010

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

4 голосов
/ 18 февраля 2010

Если файл только что загружен, предварительная обработка не выполняется, вы можете попробовать следующее:

Response.AddHeader("Refresh", "12;URL=nextpage.aspx");

Где число - это секунды до обновления:)

1 голос
/ 18 февраля 2010

В HTTP запрос может иметь только один ответ. Поскольку первым ответом является файл PDF, ответ в секундах (т.е. перенаправление) не может быть реализован.

Вы можете попытаться изменить дизайн двух страниц, перенаправив их на thanks.aspx и автоматически начав загрузку thanks.aspx.

0 голосов
/ 02 июня 2015

См. Статью, упомянутую в этом принятом ответе: https://stackoverflow.com/a/11018277/1037864 (прямая ссылка: http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/)

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

0 голосов
/ 18 февраля 2010

Response.Redirect фактически отправляет браузеру ответ, который в основном говорит, что этот ресурс перемещен на какой-то другой URL. Однако вы также пытаетесь отправить файл в ответ, поэтому эти две вещи, вероятно, конфликтуют друг с другом. Попробуйте отправить обратно небольшой JavaScript-код, который отправляет их на страницу, которую вы хотите отправить, вместо использования Response.Redirect.

ScriptManager.RegisterStartupScript(Me, Me.GetType(), "redirectScript", "window.location.href='whateverurlhere.aspx';", True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...