none
Traer datos de ViewModel a Index RRS feed

  • Pregunta

  • Buenas noches foro.. 

    Tengo la siguiente duda.. 

    Estoy desarrollando un sistema en Visual Net 2017 con sql server 2014

    Mi duda es ¿Cómo traigo los datos de mi base de datos al controlador Index pasando por ViewModel para mostrarlos en la vista Index

    de mis tres categorías CLIENTES, CODIGO_POSTAL, COLONIA

    Dejo el siguiente código 

    modelo CLIENTES:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    
    namespace MMC.Models
    {
        [Table("CREDITO")]
        public partial class CLIENTE
        {
            [Key]
            public int IdCred { get; set; }
            
            public string Nombre { get; set; }
            public string Apellido_Paterno { get; set; }
            public string Apellido_Materno { get; set; }
            public int? Edad { get; set; }
            public string IdCodPostal { get; set; }
            public string Direccion { get; set; }
            public int IdColonia { get; set; }
        }
    }
    
    


    MODELO CODIGO_POSTAL

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    
    namespace MMC.Models
    {
        [Table("CODIGO_POSTAL")]
        public class CODIGO
        {
            [Key]
            public int IdCodPos { get; set; }
            public string CodPos{ get; set; }
        }
    }

    MODELO COLONIA

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    
    namespace MMC.Models
    {
        [Table ("COLONIA")]
        public class COLONIA
        {
    
            [Key]
           
                public int IdColonia { get; set; }
                public string Colonia { get; set; }
            
        }
    }
    
    
    
    

    MI VIEWMODEL

    using MMC.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace MMC.ViewModel
    {
        public class VMCLIENTES
        {
            public CLIENTES Clente { get; set; }
            public ICollection<CODIGO_POSTAL> CodPostal { get; set; }
            public ICollection <COLONIA> colonia { get; set;}|
    
        }
    }

    MI  CONTROLADOR INDEX  (AQUI ES DONDE NO SE COMO TRAER LOS DATOS DE LA BASE DE DATOS Y MOSTRARLOS A LA VISTA INDEX.

     public ActionResult Index()
            {
    
                VMCLIENTES viewmodelist = new VMCLIENTES ();
               
                return View(viewmodelist);
    
            }
    

    LA VISTA INDEX

    @model IEnumerable<MMC.ViewModel.VMCLIENTES>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Indexddd</h2>
    
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Clente.Nombre)
            </th>
    
            <th>
                @Html.DisplayNameFor(model => model.Clente.Apellido_Paterno)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Clente.Apellido_Materno)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Clente.Edad)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CodPostal.CodPos)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.colonia.Colonia)
            </th>
           
    
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Actor)
            </td>
    
            <th>
                @Html.DisplayFor(model => model.Clente.Nombre)
            </th>
    
            <th>
                @Html.DisplayFor(model => model.Clente.Apellido_Paterno)
            </th>
            <th>
                @Html.DisplayFor(model => model.Clente.Apellido_Materno)
            </th>
            <th>
                @Html.DisplayFor(model => model.Clente.Edad)
            </th>
            <th>
                @Html.DisplayFor(model => model.CodPostal.CodPos)
            </th>
            <th>
                @Html.DisplayFor(model => model.colonia.Colonia)
            </th>
    
    
    
    

    miércoles, 14 de octubre de 2020 1:56

Todas las respuestas

  • Mi duda es ¿Cómo traigo los datos de mi base de datos al controlador Index pasando por ViewModel para mostrarlos en la vista Index

    No lo hagas. Es un error, típicamente heredado de tutoriales simplistas que confunden el Data Model con el View Model. En aplicaciones muy simples se puede usar un único Model para las dos cosas, pero en cuanto se complican un poco hay que hacer la distinción entre ambos.

    El Data Model se usa para transportar la información desde la base de datos al controlador.

    El ViewModel se usa para transportar información desde el controlador a la vista.

    Aunque en casos muy simples pueden coincidir ambos, lo correcto en una aplicación avanzada es que el DataModel tenga una estructura que refleje cómo se encuentran los datos en la base de datos (o en la capa de negocio, en caso de que se use). En cambio, el ViewModel contiene exactamente lo que se va a presentar en pantalla por mediación de una Vista concreta.

    En la práctica, el DataModel se genera mediante un ORM, tal como Entity Framework, y el propio ORM provee los métodos para cargarlo de datos desde la base de datos (que era originalmente el asunto de esta pregunta del foro). El ViewModel se escribe a mano declarando una clase con la información concreta que queremos presentar en la vista.

    Y en el controlador se combina todo: Se hace la llamada al ORM para cargar de datos el DataModel (de hecho, posiblemente se carguen varios datamodels si necesitamos información de múltiples tablas). Después se programa un fragmento de código que vaya leyendo de esos varios datamodels y lo vaya transportando a una instancia del viewmodel. Y una vez que el controlador ha terminado ya de trasladar todos esos datos desde el datamodel al viewmodel, entonces ya hace el "return View" pasándole ese viewmodel a la vista.

    miércoles, 14 de octubre de 2020 8:57
  • Hola mmarquez04

    Tienes alguna actualización sobre tu consulta?

    Saludos

    viernes, 16 de octubre de 2020 19:32
    Moderador