Domanda

Uso Entities Framework per implementare il mio livello di accesso ai dati in ASP.NET MVC. Ho un problema in View.

Quando il mio codice in VISUALIZZA qualcosa del tipo:

 

Ho ricevuto un errore in fase di esecuzione:

Riferimento oggetto non impostato su un'istanza di un oggetto.

Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Esamina la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.

Dettagli eccezione: System.NullReferenceException: riferimento oggetto non impostato su un'istanza di un oggetto.

Errore di origine:

Riga 14:

Riga 15: & Lt;% = Model.FirstName% & Gt; Linea 16:

Riga 17:

Questo è generato dal modello di visualizzazione tipizzata in modo forte. Mi sono assicurato di aver aggiunto il riferimento del modello a web.config Non ho riscontrato questo errore durante l'utilizzo di LINQ to SQL

Qualche aiuto?

È stato utile?

Soluzione 2

L'ho capito! Il problema era nella VISTA Normalmente sarebbe  utilizzando (Html.BeginForm (nuovo {Id = Model.Id}))

Se la chiave primaria nel database era IDCategoria, dovresti pensare di adattare il codice a

Id = Model.CategoryID

MA, in realtà, dovresti farlo in questo modo,

using (Html.BeginForm (new {CategoryID = Model.CategoryID}))

Altrimenti, non popolerà il modello.

Resurge, spero che sia d'aiuto!

Altri suggerimenti

Dato che non posso commentare una risposta, lo farò tramite una nuova risposta. Ho notato che il tuo attributo si chiama & Quot; Nome & Quot ;, stai per caso cercando di fare questo tutorial? E questa è l'azione Modifica con cui hai problemi?

Perché questo è esattamente lo stesso problema che io e 2 dei miei compagni di classe stiamo avendo. Ecco una spiegazione più dettagliata del problema:

Questa è l'azione del controller:

[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();
    }
}

Quando ApplyPropertyChanges viene chiamato eccezione viene sollevata. (InvalidOperationException) Messaggio di eccezione:

  

{System.InvalidOperationException: ObjectStateManager non contiene ObjectStateEntry con un riferimento a un oggetto di tipo 'ContactManager.Models.Contact'.
  at System.Data.Objects.ObjectContext.ApplyPropertyChanges (String entitySetName, Oggetto modificato)
  su ContactManager.Controllers.HomeController.Edit (Contact contactToEdit) in C: \ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controllers \ HomeController.cs: line 65}

Quando aggiungo questa riga prima di ApplyPropertyChanges:

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

x contiene una voce del tipo corretto. ( immagine di debug )

Nota: ho fatto una piccola deviazione dal tutorial e ho messo l'oggetto entità in una superclasse, quindi non devo dichiarare lo stesso oggetto in tutti i miei controller. Ma lo stesso problema si presenta seguendo il tutorial.

Sembra che il tuo Modello non sia popolato correttamente nel controller. Non ci sono davvero abbastanza informazioni nella tua domanda per capire cosa sta andando storto.

A volte Modello è nullo perché l'istruzione select con il metodo .FirstOrDefault() non ha portato un oggetto valido.

Puoi sempre modificare .First() in <=> e ricompilare la tua soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top