Response.TransmitFile и Server.Transfer - PullRequest
       22

Response.TransmitFile и Server.Transfer

2 голосов
/ 30 декабря 2011

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

Когда обе кнопки запускаются одной и той же кнопкой, 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);

Ответы [ 4 ]

1 голос
/ 30 декабря 2011

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

Сначала - вы хотите, чтобы сервер вернул PDF.Второе - вы хотите, чтобы сервер вернул страницу createshipment.aspx.

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

1 голос
/ 31 декабря 2011

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

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

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

0 голосов
/ 07 февраля 2013

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

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

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

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

0 голосов
/ 30 декабря 2011

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

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

...