none
Ayuda en detalle de MVC RRS feed

  • Pregunta

  • resulta que al realizar un  vista detalle

    no me muestra el datos de las relaciones que tiene la entidad

    por ejemplo

    @Html.DisplayNameFor(model => model.TIPOCOMPRA.DESCRIPCIONTIPOCOMPRA)
     

    no me muestra el dato que hay en la Entidad:

    * Descripcion de  la compra

    *Tipo Procedimiento

    *Descripcion de la Invetigación

    sabran a que se debe


    Horacio Xochitemol Bautista

    viernes, 1 de julio de 2016 16:39

Respuestas

  • hola

    >>te comento que si trae valores como se muestra en la siguiente imagen

    pero en la imagen la propiedad "TIPOCOMPRA" esta en null

    como vas a ver una propiedad relacionada si esa no tiene datos

    deberias usar

    LICITACION Licitacion = db.Licitacion.Include("TIPOCOMPRA").Find(id);

    para que recupere esa asociacion, porque Lazy Load no aplica si sales fuera del contexto de EF

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 1 de julio de 2016 19:38
  • Listo amigos quedo de la siguiente manera

    en el controlador.

    LICITACION Licitacion = db.Licitacion
                                        .Where(l => l.LICITACIONID == id)
                                        .Include("TIPOINVESTIGACION")
                                        .Include("TIPOEVENTO")
                                        .Include("TIPOCOMPRA").First();     

    en la vista

      <dl class="dl-horizontal data-line">
                                <dt>                                
                                   @Html.DisplayNameFor(model => model.TIPOCOMPRA.TIPOCOMPRAID)
                                </dt>
                                <dd>
                                    @Html.DisplayFor(model => @Model.TIPOCOMPRA.DESCRIPCIONTIPOCOMPRA)
                                </dd>
    
                                <dt>
                                    @Html.DisplayNameFor(model => model.TIPOEVENTO.DESCRIPCIONEVENTO)
                                </dt>
    
                                <dd>
                                    @Html.DisplayFor(model => @Model.TIPOEVENTO.DESCRIPCIONEVENTO)
                                </dd>
    Saludos muchas gracias


    Horacio Xochitemol Bautista

    sábado, 2 de julio de 2016 3:18

Todas las respuestas

  • hola

    estas seguro que la descripcion esta asignada al model que envias a la view ?

    que pasa si usas directamente

    @Model.TIPOCOMPRA.DESCRIPCIONTIPOCOMPRA

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 1 de julio de 2016 17:43
  • que tal leandro mira el tipo de compra se supone pasa automaticamente al tener la relacion entre las tablas

    Licitacion y Tipo de compra esta es mi entidad de TIPOCOMPRA

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace SISTEMADBT.Models
    {
        public partial class TIPOCOMPRA
        {
            public TIPOCOMPRA()
            {
                this.LICITACION = new List<LICITACION>();
            }
    
            [Key]
            [Display(Name = "Tipo Compra:")]
            public int TIPOCOMPRAID { get; set; }
    
            [Display(Name = "Descripcion Compra:")]
            public string DESCRIPCIONTIPOCOMPRA { get; set; }
    
    
            /*relaciones*/
            public virtual ICollection<LICITACION> LICITACION { get; set; }
        }
    }

    y esta es la entidad LICITACION

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    
    
    namespace SISTEMADBT.Models
    {
        public class LICITACION
        {
            public LICITACION()
            {
                this.LICITACIONADJUNTOS = new List<LICITACIONADJUNTO>();
                this.MREQUERIMIENTO = new List<MREQUERIMIENTO>();
                this.NUMERALES = new List<NUMERALES>();
                this.MINCONFORMIDADES = new List<MINCONFORMIDAD>();           
                //this.USUARIOS = new List<USUARIO>();
            }
    
            [Key]
            [Display(Name = "Evento:")]
            public int LICITACIONID { get; set; }
    
            public Nullable<int> USUARIOID { get; set; }
    
    
            [Display(Name="Ejercicio:")]
            [Required(ErrorMessage = "{0}  es Requerido")]
            [Range(0, int.MaxValue, ErrorMessage = "Proporciona un dato Númerico de 4 caracter")]
            /*Para  entero
            [Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
            para float
            [Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
            para double
            [Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]*/
            public int EJERCICIO { get; set; }
    
            public Nullable<int> VUELTA { get; set; }
    
         
            [Display(Name = "Tipo Compra:")]        
            public Nullable<int> TIPOCOMPRAID { get; set; }
    
            
            public Nullable<System.DateTime> FECHAREGISTRO { get; set; }
    
            [Display(Name = "Fecha Recepción CCA")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<System.DateTime> FECHARECEPCION { get; set; }
    
            [Display(Name = "Oficio CCA.")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public string OFICIOPETICION { get; set; } 
                    
    
            [Display(Name = "Tipo Procedimiento.")]        
            public Nullable<int> TIPOEVENTOID { get; set; }
    
            [Display(Name = "Tipo Inv. Merc.")]        
            public Nullable<int> TIPOINVESTIGACIONID { get; set; }
    
            public Nullable<int> COORDINAID { get; set; }
    
            [Display(Name="Licitación")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            [Index("Licitacion_NoLicitacion_index", IsUnique= true)]
            public string NOLICITACION { get; set; }
    
          
            [Display(Name = "Fundamento.")]
            [DataType(DataType.MultilineText)]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public string FUNDAMENTO { get; set; }
    
            [Display(Name = "Descripción Adquisición.")]
            [DataType(DataType.MultilineText)]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public string DESCRIPCION { get; set; }
    
            public string UNIDADCOMPRADORA { get; set; }
    
            [Display(Name = "Pub. Pre-Conv. ")]        
            public string PRECONVOCATORIA { get; set; }
    
            [Display(Name = "Fecha Púb. Conv.")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<System.DateTime> CONVOCATORIA { get; set; }
    
            [Display(Name = "Fecha Jta. Aclar.")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
            public Nullable<System.DateTime> JTAACLARACION { get; set; }
    
            [Display(Name = "Fecha Apert.")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]  
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<System.DateTime> APERTURAOFERTAS { get; set; }
    
            [Display(Name = "Fecha Fallo:")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<System.DateTime> FALLO { get; set; }
    
            [Display(Name = "Fecha Firma. Cont.")]
            [DataType(DataType.Date)]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
            [Required(ErrorMessage = "El campo {0}  es Requerido")]
            public Nullable<System.DateTime> CONTRATOS { get; set; }
    
            [DataType(DataType.MultilineText)]
            public string OBSERVACIONES { get; set; }
    
            //relaciones
            
            public virtual TIPOCOMPRA TIPOCOMPRA { get; set; }
            public virtual TIPOEVENTO TIPOEVENTO { get; set; }
            public virtual TIPOINVESTIGACION TIPOINVESTIGACION { get; set; }        
            public virtual USUARIO USUARIOS { get; set; }
    
            public virtual ICollection<MREQUERIMIENTO> MREQUERIMIENTO { get; set; }
            public virtual ICollection<NUMERALES> NUMERALES { get; set; }
            public virtual ICollection<MINCONFORMIDAD> MINCONFORMIDADES { get; set; }
            public virtual ICollection<LICITACIONADJUNTO> LICITACIONADJUNTOS { get; set; }
            public virtual ICollection<DPROVEEDOR> DPROVEEDOR { get; set; }
         
            
        }
    }
    
     no se si tenga que ver que en campo TIPOCOMPRAID  PUEDE RECIBIR NULL




    Horacio Xochitemol Bautista

    viernes, 1 de julio de 2016 18:08
  • Xochitemol,

    No, que el modelo asociado no muestre un valor para una propiedad no tiene nada que ver con que la propiedad permita valores nulos, no si la propiedad [TIPOCOMPRAID] contiene un valor.

    ¿Qué valor obtienes si muestras la propiedad [TIPOCOMPRAID]?

    @Html.DisplayNameFor(model => model.TIPOCOMPRAID)

    Es claro que si no existe un valor la relación no retornará nada.

    En caso obtengas un valor, ¿podrías mostrar el método de acción que invoca la vista?

    viernes, 1 de julio de 2016 18:24
  • Gracias Leandro  te comento que si trae valores como se muestra en la siguiente imagen 

    El metodo es 

     @Html.Raw("<a data-modal='' href='/Licitacions/Details/" + item.LICITACIONID + "' id='" + item.LICITACIONID + "' title='Detalle'> <span class='glyphicon glyphicon-search'> </span> </a>")

    y la acción es: 

      public ActionResult Details(int? id)
            {
    
                if (id == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                LICITACION Licitacion = db.Licitacion.Find(id);
                if (Licitacion == null)
                {
                    return HttpNotFound();
                }
                return View(Licitacion);
            }

    De antemano muchas gracias.


    Horacio Xochitemol Bautista

    viernes, 1 de julio de 2016 18:53
  • hola

    >>te comento que si trae valores como se muestra en la siguiente imagen

    pero en la imagen la propiedad "TIPOCOMPRA" esta en null

    como vas a ver una propiedad relacionada si esa no tiene datos

    deberias usar

    LICITACION Licitacion = db.Licitacion.Include("TIPOCOMPRA").Find(id);

    para que recupere esa asociacion, porque Lazy Load no aplica si sales fuera del contexto de EF

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 1 de julio de 2016 19:38
  • Hola Leandro,  la relación esta por el campo TIPOCOMPRAID,   por ello asumo que deberia  obtener el campo de la entidad  TIPOCOMPRA

    Horacio Xochitemol Bautista

    viernes, 1 de julio de 2016 19:42
  • Listo amigos quedo de la siguiente manera

    en el controlador.

    LICITACION Licitacion = db.Licitacion
                                        .Where(l => l.LICITACIONID == id)
                                        .Include("TIPOINVESTIGACION")
                                        .Include("TIPOEVENTO")
                                        .Include("TIPOCOMPRA").First();     

    en la vista

      <dl class="dl-horizontal data-line">
                                <dt>                                
                                   @Html.DisplayNameFor(model => model.TIPOCOMPRA.TIPOCOMPRAID)
                                </dt>
                                <dd>
                                    @Html.DisplayFor(model => @Model.TIPOCOMPRA.DESCRIPCIONTIPOCOMPRA)
                                </dd>
    
                                <dt>
                                    @Html.DisplayNameFor(model => model.TIPOEVENTO.DESCRIPCIONEVENTO)
                                </dt>
    
                                <dd>
                                    @Html.DisplayFor(model => @Model.TIPOEVENTO.DESCRIPCIONEVENTO)
                                </dd>
    Saludos muchas gracias


    Horacio Xochitemol Bautista

    sábado, 2 de julio de 2016 3:18