2011-12-30 7 views
2

У меня есть приложение ASP.NET, которое в один момент создает файл PDF и загружает следующую страницу. Я могу легко сделать это с помощью двух отдельных кнопок, но при попытке сделать это с помощью одной кнопки она становится намного сложнее.Response.TransmitFile и Server.Transfer

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

Я приложил код, который я пытался сделать работу:

Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=labels.pdf"); 
Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf")); 
Server.Transfer("~/createshipment.aspx", true); 
+1

Вы можете попробовать Response.Write вместо Server.Transfer. Вы также можете перейти на следующую страницу и начать. загрузка оттуда. – user1231231412

ответ

1

У вас не может быть двух разных ответов с сервера, но вы пытаетесь это сделать.

Во-первых, вы хотите, чтобы сервер возвращал PDF-файл. Второй - вы хотите, чтобы сервер вернул страницу createshipment.aspx.

Это просто против протокола связи. Вероятно, лучшее решение уже представлено другим пользователем, qualified_tech - вы можете открыть новое окно (javascript's window.open), и это новое окно вернет PDF-файл, и в то же время основное окно может быть отправлено на сервер и перенаправлено на сервер createshipment.aspx.

0

Это потому, что server.transfer»... прекращает выполнение текущей страницы и начинает выполнение новой страницы с помощью указанного URL-адрес страницы ".

Ваш лучший выбор - открыть новое окно на клиенте, которое получает PDF-файл, а затем выполнить любую последующую передачу, чтобы переместить пользователя на следующую страницу.

+0

Почему он загружает файл, спящий режим, а затем останавливает загрузку следующей страницы. –

+0

Это похоже на странное поведение. Есть ли исключения в журнале событий? Это почти похоже на ошибку на самой странице. Вы можете посмотреть источник страницы и посмотреть, где она перестает писать; что может дать вам ключ. –

1

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

Что вам нужно сделать, так это нажать на кнопку, чтобы создать PDF-файл и сохранить его где-нибудь (на диске или БД - в зависимости от того, что проще в вашем приложении), сохраните имя/местоположение нового файла (или первичный ключ из DB) в переменной сеанса и перенаправлять на следующую страницу. Нет причин для передачи здесь. Затем на следующей странице вы должны добавить скрытый iframe, указывающий на сохраненный файл.

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

0

Я знаю, что это старый, но я просто вижу его (ища аналогичную информацию).

Я собираюсь предположить, что это вызывает вопросы:

Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf")); 

Вы должны отобразить путь к реальному файлу, а не какой-то случайным образом созданный имя файла - или я упускаю какие-то шаги?

+0

Это действительно не проблема. Файл создается «на лету» ранее в коде. randomNumber возвращает один и тот же номер, в то время как в области видимости, а иногда и вне области действия. –

 Смежные вопросы

  • Нет связанных вопросов^_^