Как получить запрос на этот файл пользователю?

#c# #jquery #ajax #asp.net-mvc-3 #pdf-conversion

#c# #jquery #ajax #asp.net-mvc-3 #преобразование pdf

Вопрос:

Привет, я работаю над проектом Razor MVC3, и я застрял на этой проблеме уже несколько часов…

Я пытаюсь получить конвертер html в pdf для предоставления документа пользователю…

Чего я хочу, так это следующего..

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

Все данные, которые я хочу, динамически создаются в $("#content").html();

Итак, что я попробовал, так это функцию jquery / ajax, передающую $("#content").html(); в качестве параметра моей функции, которая создает pdf (работает, но я понятия не имею, как запросить созданный файл пользователю?)

Было другое решение, @(Html.ActionLink()) но я не знаю, как передать данные ($("#content").html()) по этой ссылке?

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

Любая помощь была бы оценена!

Ответ №1:

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

Комментарии:

1. Думал об этом, но оставил его в качестве последнего варианта, потому что я бы предпочел не хранить файлы на сервере.

Ответ №2:

Поскольку XmlHTTPRequest объект не может обрабатывать типы данных, отличные от html , text , json , jsonp и xml , вам нужно будет перенаправить в папку pdf.

Я не уверен, что именно вы делаете в своем Ajax-запросе, но как только это будет завершено, вы можете просто перенаправить окно (Form-Action) в местоположение созданного PDF. На самом деле это не перенаправит браузер, а только предложит сохранить файл.

Комментарии:

1. $(«#getPDF»).click(функция () { var data = $(«.страница»).html(); $.ajax({ тип: «POST», url: ‘@Url.Action(«getPDF», «Core»)’, данные: «data =» data, асинхронность: false, успех: функция (данные) { } }); });

2. моей главной надеждой было иметь возможность поместить файл в заголовки ответа и таким образом его обслуживать. Но это доступно только через actionlink, и тогда я не знаю, как передать данные.

3. Вы можете просто попробовать сделать window.open('Controller/Action/') . Это приведет к загрузке запроса или PDF-файла в этом окне / вкладке. Просто предложение.. если это поможет вашему сценарию.

Ответ №3:

Зачем просто создавать функцию, которая возвращает созданный PDF (во время запроса ajax) в качестве результата файла, а затем устанавливать местоположение окна, указывающее на это действие, после успешного завершения запроса ajax?

Редактировать: Это означает, что вы нигде не сохраняете PDF. Итак, обходной путь заключается в том, чтобы либо использовать этот плагин для загрузки jquery, либо динамически добавлять iframe, а затем отправлять данные через него. Надеюсь, это поможет.

Комментарии:

1. Хм, звучит разумно, но как бы я это сделал? Я имею в виду, что я использую jquery для передачи данных, файл создается внутри функции, но затем он застрял там (я надеялся, что не придется сохранять файл локально).

Ответ №4:

Я нашел обходной путь, я написал расширение для моего HtmlHelper и использовал его для отображения моего элемента управления в HTML-строку вместо представления. Для этого я мог бы использовать actionlink, чтобы сказать «отобразить эту страницу» и таким образом получить все html-данные.

http://msug.vn.ua/Posts/Details/3301

Спасибо за помощь!