Response.TransmitFile и Server.Transfer

У меня есть приложение 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 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам