2014-11-19 2 views
1

Я использую asp.net mvc, и я хочу показать pdf в диалоговом окне jquery или внутри всплывающего всплывающего окна boostrap.Отображение PDF в PopUp

Я пробовал вызов ajax, но если действие контроллера возвращается Файл с Return File(....), то он вызывает неправильный вывод во всплывающем окне.

Если я использую iframe, то, когда я указываю url внутри iframe, он перенаправляется на действие контроллера Httpget, но я хочу, чтобы он перенаправлялся на действие контроллера httppost (потому что мне тоже нужно отправить форму).

На самом деле, почему я хочу открыть pdf внутри всплывающего окна или iframe, потому что прямо сейчас в этом же окне открывается окно, но я хочу, чтобы он открывался в новой вкладке браузера или внутри всплывающего окна или внутри iframe, чтобы посетитель продолжал использовать веб-сайт без нажатие кнопки возврата назад.

Я застрял с этим .. Помощь в помощи .. !!!!

+0

открыть PDF, если браузер не имеет какой-либо плагин, как Chrome делает ** он никогда не будет когда-либо открыть PDF ** ... вы должны просто отправьте поток обратно пользователю, чтобы появилось диалоговое окно «Сохранить как» ... для этого есть множество примеров в Stackoverflow, а также в Google. – balexandre

ответ

1

Вы можете использовать только запрос GET с iframe, и это правильный способ сделать это. Поэтому, если вы создаете PDF-файл с запросом POST, вам нужно вернуть какой-то идентификатор файла или имя файла. А затем в вашем iframe вы получите файл, используя идентификатор или имя файла. запрос POST

  1. для создания PDF, который возвращает запрос GET в ID или filename
  2. /path/to/your/pdf_files/<filename>.pdf в качестве фрейма.

UPDATE:

Если вы хотите отобразить маленькие файлы (этот метод не рекомендуется для больших файлов), которые приходят из предыдущего запроса POST без сохранения их в любом месте, то использовать URL данных:

<iframe type="application/pdf" 
     width="95%" 
     height="95%" 
     src="data:application/pdf;base64,<base64_encoded_pdf_file_string_here>"> 
    </iframe> 

Просто замените <base64_encoded_pdf_file_string_here> с фактическим base64 строковое представление файла.

Для того, чтобы получить строку base64 в потоке, используйте метод Convert.ToBase64String.

+0

Я не сохраняю файл нигде ... я возвращаю поток байтов ... –

0

Немного грязный способ, но вы можете создать какую-то страницу «прокси», где вы сначала направите свой IFRame и где у вас будет форма (или вы даже можете ее создать без прокси-страницы, используя только javascript - он может быть невидимым, сама форма). Затем вы передаете данные в эту форму внутри iframe с помощью javascript и выдаете действие submit в этой форме. Таким образом вы будете выдать запрос POST (если вы правильно настроите свою форму).

UPD: простой пример:

var iframe = document.createElement("iframe"); 
document.body.appendChild(iframe); 
var form = iframe.contentDocument.createElement("form"); 
form.action="http://example.com/myuri"; 
form.method="post"; 
iframe.contentDocument.body.appendChild(form); 
var data = iframe.contentDocument.createElement("input"); // You can create more of these "data" variables if you wish to pass more data to the server 
data.type="hidden"; 
data.name="data_field"; 
data.value="somevalue"; 
form.appendChild(data); 
form.submit(); // This actually executes the form and passing all data as POST data to the server 
Смежные вопросы