Pregunta

Utilizo Entities Framework para implementar mi capa de acceso a datos en ASP.NET MVC.Tengo un problema en Ver.

Cuando mi código en la VISTA es algo como:

Recibí un error en tiempo de ejecución:

Referencia a objeto no establecida como instancia de un objeto.

Descripción:Se produjo una excepción no controlada durante la ejecución de la solicitud web actual.Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de excepción:System.NullReferenceException:Referencia a objeto no establecida como instancia de un objeto.

Error de fuente:

Línea 14:

Línea 15:< %= Model.FirstName %> Línea 16:

Línea 17:

Esto se genera a partir de una plantilla de vista con tipo fuerte.Me aseguré de que agregué referencia de modelo a Web.Config No encontré este error cuando estaba usando Linq a SQL

¿Alguna ayuda?

¿Fue útil?

Solución 2

¡Lo descubrí! El problema estaba en la VISTA Normalmente, sería  utilizando (Html.BeginForm (new {Id = Model.Id}))

Si la clave principal en su base de datos era CategoryID, pensaría que debería adaptar el código a

Id = Model.CategoryID

PERO, en realidad, deberías hacerlo así,

utilizando (Html.BeginForm (nuevo {CategoryID = Model.CategoryID}))

De lo contrario, no rellenará el modelo.

Resurge, ¡espero que ayude!

Otros consejos

Como no puedo comentar una respuesta, lo haré a través de una nueva respuesta ... Me doy cuenta de que su atributo se llama & Quot; Nombre & Quot ;, ¿por casualidad está tratando de hacer este tutorial? ¿Y esta es la acción Editar con la que tienes problemas?

Porque este es exactamente el mismo problema que yo y 2 de mis compañeros tenemos. Aquí hay una explicación más detallada del problema:

Esta es la acción del controlador:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit) {
    if (!ModelState.IsValid)
        return View();

    try {
        var originalContact = (from c in base._entities.ContactSet
                               where c.Id == contactToEdit.Id
                               select c).First();
        base._entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);
        base._entities.SaveChanges();

        return RedirectToAction("Index");
    } catch(Exception e) {
        return View();
    }
}

Cuando se aplica ApplyPropertyChanges, se genera una excepción . (InvalidOperationException) Mensaje de excepción:

  

{System.InvalidOperationException: ObjectStateManager no contiene ObjectStateEntry con una referencia a un objeto de tipo 'ContactManager.Models.Contact'.
  en System.Data.Objects.ObjectContext.ApplyPropertyChanges (String entitySetName, Object cambiado)
  en ContactManager.Controllers.HomeController.Edit (Contact contactToEdit) en C: \ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controllers \ HomeController.cs: línea 65}

Cuando agrego esta línea antes de ApplyPropertyChanges:

System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);

x contiene una entrada del tipo correcto. ( imagen de depuración )

Nota: Realicé una pequeña desviación del tutorial y puse el objeto de entidades en una superclase para no tener que declarar el mismo objeto en todos mis controladores. Pero surge el mismo problema al seguir el tutorial.

Parece que su Modelo no está poblado correctamente en el controlador. Sin embargo, no hay realmente suficiente información en su pregunta para determinar qué está sucediendo exactamente.

A veces Modelo es nulo porque la instrucción select con el método .FirstOrDefault() No trajo un objeto válido.

siempre puedes cambiar .FirstOrDefault() a .First() y vuelva a compilar su solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top