none
Agregar una lista a una plantilla HTML RRS feed

  • Pregunta

  • Trabajo con Windows Forms, C#, Razor Engine, ItextSharp 5, Visual Studio 2015

    Estoy creando un pdf a partir de una plantilla html, no puedo escribir el detalle en el html.

    Los datos que van a ir en el html los obtengo de un xml el detalle lo obtengo por medio de un for each poniendo todos los detalles en una lista.

    var list = new List<DetalleFactura>();
    
                    //Recorro todos el detallede la factura
                    foreach (var encontrado in factura.detalles)
                    {
                        var entity = new DetalleFactura()
                        {
                            CodigoPrincipal = encontrado.codigoPrincipal,
                            Cantidad = $"{Convert.ToInt32(encontrado.cantidad):N2}",
                            PrecioUnitario = encontrado.precioUnitario,
                            Descuento = encontrado.descuento,
                            PrecioTotal = encontrado.precioTotalSinImpuesto
                        };
                        list.Add(entity); //Lo agrego a la lista.
                    }
                    
                    var template = readText;
                    var model = new FacturaViewModel()
                    {
                        Ambiente = factura.infoTributaria.ambiente,
                        RazonSocial = factura.infoTributaria.razonSocial,
                        Ruc = Convert.ToString(factura.infoTributaria.ruc),
                        DireccionMatriz = factura.infoTributaria.dirMatriz,
                        ClaveAcceso = factura.infoTributaria.claveAcceso,
                        Estableciento = $"{Convert.ToInt32(factura.infoTributaria.estab):000}",
                        PuntoEmision = Convert.ToString(factura.infoTributaria.ptoEmi),
                        Secuencial = $"{Convert.ToInt32(factura.infoTributaria.secuencial):000000000}", 
                        RazonSocialComprador = factura.infoFactura.razonSocialComprador,
                        IdentificacionComprador = Convert.ToString(factura.infoFactura.identificacionComprador),
                        DireccionComprador = factura.infoFactura.direccionComprador,
                        TotalSinImpuestos = factura.infoFactura.totalSinImpuestos,
                        FilasDetalle = list //Le asigno la lista.
                    };
    
                    var result = Engine.Razor.RunCompile(template, "Key", null, model);

    Pero no se escribe en la plantilla html. Esto es viéndolo en el depurador

    <table border="0">
                        <tbody>
                            <tr bgcolor="#F5B041" style="font-size:8.0pt;">
                                <td width="8" valign="top" align="left">
                                    <b style="color:white;">Cód. Principal</b>
                                </td>
                                <td width="7" valign="top" align="left">
                                    <b style="color:white;">Cód. Auxiliar</b>
                                </td>
                                <td width="6" valign="top" align="left">
                                    <b style="color:white;">Cant.</b>
                                </td>
                                <td width="40" valign="top" align="left">
                                    <b style="color:white;">Descripción</b>
                                </td>
                                <td width="20" valign="top" align="left">
                                    <b style="color:white;">Detalle Adicional</b>
                                </td>
                                <td width="5" valign="top" align="right">
                                    <b style="color:white;">P/U</b>
                                </td>
                                <td width="5" valign="top" align="right">
                                    <b style="color:white;">Desc.</b>
                                </td>
                                <td width="7" valign="top" align="right">
                                    <b style="color:white;">Precio Total</b>
                                </td>
                            </tr>
                            System.Collections.Generic.List`1[CrearReportePDF.Models.DetalleFactura]
                        </tbody>
                    </table>

    ¿Que puedo estar haciendo mal?, en esta factura tengo tres item para el detalle, cual es la manera correcta de escribir el detalle en el HTML

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 18 de febrero de 2019 15:46

Respuestas

  • hola

    Si FilasDetalle es una lista deberias iterar para crear las rows

    <table border="0">
        <tbody>
            <tr bgcolor="#F5B041" style="font-size:8.0pt;">
                <td width="8" valign="top" align="left">
                    <b style="color:white;">Cód. Principal</b>
                </td>
                <td width="7" valign="top" align="left">
                    <b style="color:white;">Cód. Auxiliar</b>
                </td>
                <td width="6" valign="top" align="left">
                    <b style="color:white;">Cant.</b>
                </td>
                <td width="40" valign="top" align="left">
                    <b style="color:white;">Descripción</b>
                </td>
                <td width="20" valign="top" align="left">
                    <b style="color:white;">Detalle Adicional</b>
                </td>
                <td width="5" valign="top" align="right">
                    <b style="color:white;">P/U</b>
                </td>
                <td width="5" valign="top" align="right">
                    <b style="color:white;">Desc.</b>
                </td>
                <td width="7" valign="top" align="right">
                    <b style="color:white;">Precio Total</b>
                </td>
            </tr>
    
            @foreach (var detalle in Model.FilasDetalle) {
                <tr>
                    <td>
                        @detalle.CodigoPrincipal
                    </td>
                    <td>
                        @detalle.Cantidad
                    </td>
                    <td>
                        @detalle.PrecioUnitario 
                    </td>
                    <td>
                        @detalle.Descuento  
                    </td>
                    <td>
                        @detalle.PrecioTotal  
                    </td>
                <tr>
            }
    
        </tbody>
    </table>

    Esto esta en la documentacion

    1. About Razor and its syntax


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila lunes, 18 de febrero de 2019 18:04
    lunes, 18 de febrero de 2019 16:55

Todas las respuestas

  • hola

    Si FilasDetalle es una lista deberias iterar para crear las rows

    <table border="0">
        <tbody>
            <tr bgcolor="#F5B041" style="font-size:8.0pt;">
                <td width="8" valign="top" align="left">
                    <b style="color:white;">Cód. Principal</b>
                </td>
                <td width="7" valign="top" align="left">
                    <b style="color:white;">Cód. Auxiliar</b>
                </td>
                <td width="6" valign="top" align="left">
                    <b style="color:white;">Cant.</b>
                </td>
                <td width="40" valign="top" align="left">
                    <b style="color:white;">Descripción</b>
                </td>
                <td width="20" valign="top" align="left">
                    <b style="color:white;">Detalle Adicional</b>
                </td>
                <td width="5" valign="top" align="right">
                    <b style="color:white;">P/U</b>
                </td>
                <td width="5" valign="top" align="right">
                    <b style="color:white;">Desc.</b>
                </td>
                <td width="7" valign="top" align="right">
                    <b style="color:white;">Precio Total</b>
                </td>
            </tr>
    
            @foreach (var detalle in Model.FilasDetalle) {
                <tr>
                    <td>
                        @detalle.CodigoPrincipal
                    </td>
                    <td>
                        @detalle.Cantidad
                    </td>
                    <td>
                        @detalle.PrecioUnitario 
                    </td>
                    <td>
                        @detalle.Descuento  
                    </td>
                    <td>
                        @detalle.PrecioTotal  
                    </td>
                <tr>
            }
    
        </tbody>
    </table>

    Esto esta en la documentacion

    1. About Razor and its syntax


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila lunes, 18 de febrero de 2019 18:04
    lunes, 18 de febrero de 2019 16:55
  • Hola @Leandro

    No pensé que en un simple html se podría aplicar razor, solo pensaba que se podía hacer solo en los archivos cshtml.

    Por eso no trate de probarlo.


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    lunes, 18 de febrero de 2019 18:05