Principales respuestas
Array de bytes de la vista al modelo.

Pregunta
-
Hola, estoy haciendo una aplicacion en MVC 2 con C# y no se como puedo pasar un array de byte de una View al Controlador, lo he probado de muchas formas pero siempre se me pasa el parametro null.
aqui tengo la vista, donde Model.Documento es un array de byte:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="Column_Right"> <iframe src="<%: Url.Action("GenerarPdf", "Consulta", new { documento = Model.Documento})%>" width="725" height="725"></iframe> </asp:Content>
Ahora tengo el controlador:
public class ConsultaController : Controller { public PdfResult GenerarPdf(byte[] documento) { return new PdfResult(documento); } }
y la claro Global.asaxroutes.MapRoute( "Pdf", "{controller}/{action}/{documento}", new { controller = "Consulta", action = "GenerarPdf"}, new { documento = (byte[]) null} );
Muchas gracias de antemano.
Respuestas
-
Hola!
He elaborado la respuesta en un post de mi blog: http://geeks.ms/blogs/etomas/archive/2012/06/26/asp-net-mvc-mandar-un-byte.aspxResumiendo se trata básicamente de codificar el byte[] a BASE64.
Un saludo!
Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
- Marcado como respuesta Silvia88 miércoles, 27 de junio de 2012 6:51
Todas las respuestas
-
Quiero cargar en una vista un pdf que lo tengo guardado en la base de datos como un array de bytes.
Al cargarse la vista, lee la url de la etiqueta iframe y recupera Model.Documento (Que contiene el array de bytes) , llama a controlador (Consulta) y a la acción (GenerarPdf) donde debería recibir el array, pero me lo pasa nulo.
Igual hay que hacerlo de otra forma...
Gracias por la respuesta.=)
-
Hola!
He elaborado la respuesta en un post de mi blog: http://geeks.ms/blogs/etomas/archive/2012/06/26/asp-net-mvc-mandar-un-byte.aspxResumiendo se trata básicamente de codificar el byte[] a BASE64.
Un saludo!
Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
- Marcado como respuesta Silvia88 miércoles, 27 de junio de 2012 6:51
-
Muchas gracias Eduard, la primera forma que explicas funciona perfectamente en MVC2.
Mi problema ahora es que en el ejemplo utilizas un array de 3 posiciciones pero mi array de bytes es mucho mas grande, ya que es un documento en pdf (byte[150000]), y al cargar la URL me salta error de que es demasiado larga.
Se te ocurre como podría hacerlo??
Saludos=)
-
:)
No lo mandes por URL.
Mándalo por POST en un campo hidden (data es la cadena en Base64):
<form id="frmPdf" method="post" action="<%=Url.Action("GenerarPdf","Consulta")> <%= Html.Hidden("documento", data) %> </form>
Luego por Javascript haces el submit del form (si usas jQuery es $("#frmPdf").submit() y si no, puedes hacer document.getElementById("frmPdf").submit()).
Y en el controlador:
[HttpPost] public PdfResult GenerarPdf(byte[] documento) { return new PdfResult(documento); }
El HttpPost no es estrictamente necesario, pero indica que la acción es solo accesible via POST.
Por supuesto si quieres mostrar el resultado, puedes colocar el formulario en un <iframe>.
Saludos!
Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
- Editado eduard tomàsMVP miércoles, 27 de junio de 2012 7:15
-