2009-08-24 7 views
5

En la aplicación ASP.NET MVC tengo una página de acción() que representa una página (como una página wiki).ASP.NET MVC: Obtener un resultado de acción dentro de otra acción

Ahora, tengo otra acción RenderPdf() que debe recoger el resultado HTML de Page() y usar el componente HTML2PDF para crear una versión en PDF de esa página.

¿Cómo puedo recopilar el resultado HTML de una acción dentro de otra acción? Nota: no en la vista, sino en el código de acción directamente.

Respuesta

0

Puede usar el ensamblaje MVC Futures.

Hay un método llamado RenderAction() que recibe la salida HTML de una acción, pero desde el interior de una vista ...

+0

En realidad, Bruno, RenderAction() es un HtmlHelper, que está diseñado para ser utilizado dentro de una vista. No permitirá que mladen capture la salida renderizada. – apiguy

+0

Oh, sí, lo siento. Adaptaré la respuesta. Gracias –

0

Si el pdf es sólo una copia de la salida Cant utiliza javascript para capturar la imagen y volver a Render PDF?

O bien, pase la versión en pdf a la vista dentro del mismo modelo de la primera acción. ¿Mantenerlo oculto si/hasta que el usuario lo necesite?

+0

zsharp, esa es la solución que planeaba hacer, pero no estoy contento con ella. Tendré casos en que el PDF tendrá 100 páginas. No me gusta pasar ese HTML grande de un lado a otro con Javascript. – mladen

+0

Otra forma podría ser crear el pdf en el código de acción y guardar en el archivo en el servidor justo antes de la vista de representación. Acceda al pdf con una identificación única enviada para verla para que coincida con la identificación en el nombre del archivo. – zsharp

+0

zsharp, el problema es que para crear PDF necesito HTML primero, porque estoy usando el componente HTML2PDF – mladen

0

El método sugerido por Jan Willem B funciona y he probado esto en ASP .NET MVC 1.

Mientras llama GetActionOutput, utilizar sólo el nombre del controlador. Por ejemplo, si el nombre del controlador invocado es AccountController, diríjalo solo a Account.

p. Ej. si desea llamar al método de prueba en AccountController, la sintaxis sería ... GetActionOutput ("Cuenta", "Prueba");

Cuestiones relacionadas