2009-08-24 11 views
5

Nell'applicazione ASP.NET MVC ho una pagina di azione() che esegue il rendering di una pagina (come una pagina wiki).ASP.NET MVC: ottiene un'azione in un'altra azione

Ora, ho un'altra azione RenderPdf() che dovrebbe raccogliere l'output HTML di Page() e utilizzare il componente HTML2PDF per creare la versione PDF di quella pagina.

Come raccogliere l'output HTML di un'azione in un'altra azione. Nota: non nella vista, ma nel codice di azione direttamente.

risposta

0

È possibile utilizzare l'assemblaggio MVC Futures.

C'è un metodo chiamato RenderAction() che ottiene l'output HTML di un'azione, ma da dentro una vista ...

+0

In realtà Bruno, RenderAction() è un HtmlHelper, progettato per essere utilizzato all'interno di una vista. Non permetterà a mladen di catturare l'output renderizzato. – apiguy

+0

Oh, si, mi dispiace. Adatterò la risposta. Grazie –

0

Se il pdf è solo una copia dell'output Cant utilizzare JavaScript per catturare il immagine e torna a Render PDF?

Oppure passare la versione pdf alla vista all'interno dello stesso modello della prima azione. Tienilo nascosto se/finché l'utente non ne ha bisogno?

+0

zsharp, questa è la soluzione che stavo progettando di fare, ma non ne sono felice. Avrò casi in cui il PDF avrà una lunghezza pari a 100 pagine. Non mi piace passare il grande HTML avanti e indietro con Javascript. – mladen

+0

un altro modo potrebbe essere quello di creare il pdf nel codice di azione e salvare su file sul server appena prima della visualizzazione di rendering. accedi a pdf con un ID univoco inviato per visualizzare l'id nel nome del file. – zsharp

+0

zsharp, il problema è - per creare PDF ho bisogno di HTML prima, perché sto usando il componente HTML2PDF – mladen

0

Si potrebbe verificare questo awnser a una domanda simile:

Send ASP.NET MVC action result inside email

Ovviamente si avrebbe bisogno di sostituire la chiamata SendEmailKThx() con la vostra generazione HTML2PDF PDF.

0

Il metodo suggerito da Jan Willem B funziona e ho provato questo su ASP .NET MVC 1.

Durante la chiamata GetActionOutput, utilizzare solo il nome del controller. ad esempio se il nome del controller invocato è AccountController, indirizzarlo come solo Account.

ad es. se si desidera chiamare il metodo di prova su AccountController, la sintassi sarebbe ... GetActionOutput ("Account", "Test");

Problemi correlati