2009-08-24 2 views
5

В приложении ASP.NET MVC у меня есть страница действий(), которая отображает страницу (например, страницу вики).ASP.NET MVC: получить результат действия в рамках другого действия

Теперь у меня есть еще одно действие RenderPdf(), которое должно собирать выходные данные HTML() и использовать компонент HTML2PDF для создания PDF-версии этой страницы.

Как получить вывод HTML одного действия в рамках другого действия. Примечание: не в представлении, а в коде действия напрямую.

ответ

0

Вы можете использовать сборку MVC Futures.

Существует метод, называемый RenderAction(), который получает выход HTML в действии, но изнутри зрения ...

+0

На самом деле Bruno, RenderAction() - это HtmlHelper, который предназначен для использования в представлении. Это не позволит mladen захватить визуализированный вывод. – apiguy

+0

О, да, извините. Я адаптирую ответ. Спасибо –

0

Если PDF просто копия вывода наклоняю вы используете JavaScript, чтобы захватить изображение и вернуться к рендерингу PDF?

Или передайте версию pdf на вид в той же модели первого действия. Держите его скрытым, если/до тех пор, пока пользователю это не понадобится?

+0

zsharp, то есть обходной путь, который я планировал сделать, но я не доволен им. У меня будут случаи, когда PDF будет как 100 страниц. Мне не нравится передавать этот большой HTML взад и вперед с помощью Javascript. – mladen

+0

другим способом может быть создание pdf-кода в коде действия и сохранение в файл на сервере непосредственно перед рендерингом. доступ к PDF с уникальным идентификатором, отправленным для просмотра, в соответствии с идентификатором в имени файла. – zsharp

+0

zsharp, проблема в том, что для создания PDF мне нужен HTML сначала, потому что я использую компонент HTML2PDF – mladen

0

Вы можете проверить это awnser на подобный вопрос:

Send ASP.NET MVC action result inside email

Очевидно, что вы должны были бы заменить вызов SendEmailKThx() с вашим поколением HTML2PDF PDF.

0

Предложенный метод Ян Виллем Б, и я проверил это на ASP .NET MVC 1.

Призывая GetActionOutput, используйте только имя контроллера. например, если имя вызываемого контроллера - AccountController, укажите его только как учетную запись.

например. если вы хотите вызвать Test Method на AccountController, синтаксис будет ... GetActionOutput («Учетная запись», «Тест»);

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