none
(ASP.NET MVC)Necesito que mi orden de compra sume el total de productos y el precio total. RRS feed

  • Pregunta

  • Buenas Noches, tengo un trabajo donde debo crear una web via asp net mvc en visual estudio, y todo corre bien, pero necesito que cuando ingrese a ver la orden de compra me de el total de productos y el precio total ( osea si agrego 2, 3, 4 productos me sume el precio de ellos )

    Esto es actualmente lo que muestraActualmente esto es lo que muestra.

    Esto es lo que tengo en la clase:

     public class OrdenDeCompra
        {
            [Key]
            public int OrdenDeCompraID { get; set; }
    
            public int Customerid { get; set; }
            public int ProductoID { get; set; }
    
            public int SuplidorID { get; set; }
    
            public int PaymentTermsID { get; set; }
    
            //public int ShipmentTermsID { get; set; }
    
            public DateTime PurchaseOrderDate { get; set; }
    
            //public EstadoOrdenDeCompra EstadoOrdenDeCompra { get; set; }
    
            [DataType(DataType.MultilineText)]
            public string Remarks { get; set; }
    
            public virtual Suplidor Suplidor { get; set; }
    
            public virtual ModoDePago ModoDePago { get; set; }
    
            public virtual ModoEnvio ModoEnvio { get; set; }
    
            public virtual Cliente Cliente { get; set; }
    
            public virtual Producto Producto { get; set; }
    
            public virtual ICollection<DetallesOrdenDeCompra> DetallesOrdenDeCompras { get; set; }
    
        }

    Gracias anticipadas.


    Josmer Suero


    martes, 14 de julio de 2020 1:06

Respuestas

  • Bien, a la vista de la pregunta y tal como la formulas, se ve que cometes un error muy frecuente entre los principiantes en MVC: estás confundiendo el modelo de datos con el modelo de la vista.

    Esta confusión se debe a que muchos tutoriales o manuales básicos utilizan el mismo modelo para las dos cosas, porque esto es lo más simple de hacer cuando tu vista tiene que presentar exactamente los mismos datos que tienes en la base de datos. Pero en cuanto el programa se vuelve un poco más complicado y tienes que presentar en pantalla el resultado de hacer algún cálculo (en este caso el precio total), entonces comienza a ser conveniente separar los dos modelos.

    Desde luego se pueden hacer algunas chapucillas, como por ejemplo meter el cálculo dentro de la Vista. Para ello tomarías el bucle que tienes dentro de la vista para presentar todas las líneas del pedido, y dentro de ese bucle vas acumulando en una variable el importe de cada línea, y a la salida del bucle escribes esa variable en el campo Total. Esto funciona, pero no es elegante, porque se "salta" el principio de "separation of concerns" del patrón MVC, al meter dentro de la Vista un cálculo que se debería hacer en el Controlador.

    Para hacerlo bien, debes declarar una nueva clase que sea el "Modelo de la Vista", que por dentro contendrá los mismos campos que usas en el modelo de datos y además un campo adicional para contener el total. Desde el controlador, llamas a base de datos para obtener las líneas de pedido y luego creas una instancia del modelo de la vista y copias los campos desde el modelo de datos al modelo de la vista. Y además, dentro del controlador, también usas un bucle para calcular el total y lo metes en el modelo de la vista en el campo total. Entonces le pasas a la vista ese modelo de la vista (en lugar de pasarle el modelo de datos). Dentro de la vista, presentas en su correspondiente ubicación cada uno de los datos de ese modelo, incluyendo el total.

    Puede pensarse que esto es "matar moscas a cañonazos" para hacer algo tan simple como es solamente pasar el Total, pero es conveniente acostumbrarse a trabajar de esta manera (es decir, usando el modelo de la vista, que en la documentación en inglés verás como ViewModel), porque lo necesitarás en cuanto tu aplicación crezca un poco y empieces a tener pantallas un poco más sofisticadas cuyo contenido no sea una copia directa de una tabla de base de datos.

    martes, 14 de julio de 2020 21:24

Todas las respuestas

  • Hola Josmer Suero,  

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Eric Ruiz 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    martes, 14 de julio de 2020 18:23
    Moderador
  • Bien, a la vista de la pregunta y tal como la formulas, se ve que cometes un error muy frecuente entre los principiantes en MVC: estás confundiendo el modelo de datos con el modelo de la vista.

    Esta confusión se debe a que muchos tutoriales o manuales básicos utilizan el mismo modelo para las dos cosas, porque esto es lo más simple de hacer cuando tu vista tiene que presentar exactamente los mismos datos que tienes en la base de datos. Pero en cuanto el programa se vuelve un poco más complicado y tienes que presentar en pantalla el resultado de hacer algún cálculo (en este caso el precio total), entonces comienza a ser conveniente separar los dos modelos.

    Desde luego se pueden hacer algunas chapucillas, como por ejemplo meter el cálculo dentro de la Vista. Para ello tomarías el bucle que tienes dentro de la vista para presentar todas las líneas del pedido, y dentro de ese bucle vas acumulando en una variable el importe de cada línea, y a la salida del bucle escribes esa variable en el campo Total. Esto funciona, pero no es elegante, porque se "salta" el principio de "separation of concerns" del patrón MVC, al meter dentro de la Vista un cálculo que se debería hacer en el Controlador.

    Para hacerlo bien, debes declarar una nueva clase que sea el "Modelo de la Vista", que por dentro contendrá los mismos campos que usas en el modelo de datos y además un campo adicional para contener el total. Desde el controlador, llamas a base de datos para obtener las líneas de pedido y luego creas una instancia del modelo de la vista y copias los campos desde el modelo de datos al modelo de la vista. Y además, dentro del controlador, también usas un bucle para calcular el total y lo metes en el modelo de la vista en el campo total. Entonces le pasas a la vista ese modelo de la vista (en lugar de pasarle el modelo de datos). Dentro de la vista, presentas en su correspondiente ubicación cada uno de los datos de ese modelo, incluyendo el total.

    Puede pensarse que esto es "matar moscas a cañonazos" para hacer algo tan simple como es solamente pasar el Total, pero es conveniente acostumbrarse a trabajar de esta manera (es decir, usando el modelo de la vista, que en la documentación en inglés verás como ViewModel), porque lo necesitarás en cuanto tu aplicación crezca un poco y empieces a tener pantallas un poco más sofisticadas cuyo contenido no sea una copia directa de una tabla de base de datos.

    martes, 14 de julio de 2020 21:24