none
Array de bytes de la vista al modelo. RRS feed

  • 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.asax

    routes.MapRoute(
           "Pdf",
           "{controller}/{action}/{documento}",
            new { controller = "Consulta", action = "GenerarPdf"},
            new { documento = (byte[]) null}
    ); 
    Muchas gracias de antemano.


    lunes, 25 de junio de 2012 15:25

Respuestas

Todas las respuestas

  • Hola,

    ¿como que pasar un array de byte de una View al Controlador? ¿Qué es lo que quieres hacer? 

    Saludos.


    Atentamente, Sergio.

    Blog
    Twitter

    martes, 26 de junio de 2012 9:20
  • 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.=)

    martes, 26 de junio de 2012 10:49
  • 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.aspx

    Resumiendo 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
    martes, 26 de junio de 2012 21:16
  • 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=)

    miércoles, 27 de junio de 2012 7:07
  • :)

    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


    miércoles, 27 de junio de 2012 7:14
  • Muchas gracias Eduard, por fin me funciona....=)

    Saludos!

    miércoles, 27 de junio de 2012 8:45