Principales respuestas
Ayuda en detalle de MVC

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
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- Marcado como respuesta Sergio ParraModerator viernes, 8 de julio de 2016 7:39
-
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
- Marcado como respuesta Sergio ParraModerator viernes, 8 de julio de 2016 7:39
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 -
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
-
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?
-
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
-
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- Marcado como respuesta Sergio ParraModerator viernes, 8 de julio de 2016 7:39
-
-
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
- Marcado como respuesta Sergio ParraModerator viernes, 8 de julio de 2016 7:39