2009-08-24 12 views
5

In ASP.NET MVC-Anwendung habe ich eine Aktion Page(), die eine Seite (wie eine Wiki-Seite) rendert.ASP.NET MVC: Get action output innerhalb einer anderen Aktion

Jetzt habe ich eine andere Aktion RenderPdf(), die die HTML-Ausgabe von Page() sammeln und HTML2PDF-Komponente verwenden soll, um PDF-Version dieser Seite zu erstellen.

Wie sammle ich die HTML-Ausgabe einer Aktion innerhalb einer anderen Aktion. Hinweis: nicht in der Ansicht, sondern direkt im Aktionscode.

Antwort

0

Sie können die MVC Futures Baugruppe verwenden.

Es gibt eine Methode namens Render(), die die HTML-Ausgabe einer Aktion bekommt, sondern von innen Blick ...

+0

Eigentlich ist Bruno, RenderAction() ein HtmlHelper, der in einer Ansicht verwendet werden soll. Mladen kann die gerenderte Ausgabe nicht erfassen. – apiguy

+0

Oh, ja, tut mir leid. Ich werde die Antwort anpassen. Danke –

0

Wenn die pdf nur eine Kopie der Ausgabe ist kann nicht Sie Javascript verwenden, das erfassen Bild und zurück zu Render PDF?

Oder übergeben Sie die PDF-Version an die Ansicht innerhalb des gleichen Modells der ersten Aktion. Halten Sie es versteckt, wenn/bis der Benutzer es braucht?

+0

zsharp, das ist die Problemumgehung, die ich vorhatte, aber ich bin nicht glücklich damit. Ich werde Fälle haben, in denen PDF wie 100 Seiten lang sein wird. Ich mag es nicht, das große HTML mit Javascript hin und her zu übergeben. – mladen

+0

eine andere Möglichkeit könnte sein, die PDF im Aktionscode zu erstellen und in der Datei auf dem Server zu speichern, bevor die Ansicht angezeigt wird. Zugriff auf PDF mit eindeutiger ID, die zur Anzeige der ID im Dateinamen gesendet wird. – zsharp

+0

zsharp, das Problem ist - um PDF zu erstellen, brauche ich zuerst HTML, weil ich HTML2PDF Komponente verwende – mladen

0

Das Verfahren von Jan Willem B vorgeschlagen arbeitet und Getestet habe ich diese auf ASP .NET MVC 1.

Während GetActionOutput Aufruf, benutzen Sie einfach den Namen des Controllers. Wenn der Name des aufgerufenen Controllers beispielsweise "AccountController" lautet, müssen Sie ihn nur als "Account" angeben.

z.B. Wenn Sie Test Method auf AccountController aufrufen möchten, wäre die Syntax ... GetActionOutput ("Account", "Test");

Verwandte Themen