Pergunta

Eu uso Entidades Framework para implementar os meus dados accsee camada na ASP.NET MVC. Eu tenho um problema na vista.

Quando meu código no VIEW algo como:

Eu tenho um erro em tempo de execução:

objecto de referência não definida para uma instância de um objecto.

Descrição: Uma exceção não tratada ocorreu durante a execução da solicitação da web atual. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Exceção detalhes: System.NullReferenceException:. Referência de objeto não definida para uma instância de um objeto

Fonte de erro:

Linha 14:

Linha 15: <% = Model.FirstName%> Linha 16:

Linha 17:

Este é gerada a partir de modelo de visão forte-digitado. Eu garantiu que eu adicionei modelo referrence para web.config Eu não encontrar este erro quando eu estava usando LINQ to SQL

Qualquer ajuda?

Foi útil?

Solução 2

Eu percebi isso! O problema era na vista Normalmente, seria, usando (Html.BeginForm (novo {id = Model.Id}))

Se a chave primária em seu banco de dados foi CategoryID, você pensaria que você deve adaptar o código para

ID = Model.CategoryID

Mas, na verdade, você deve fazê-lo como este,

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

Caso contrário, não vai preencher o modelo.

Resurge, espero que ajude!

Outras dicas

Desde que eu não posso comentar sobre uma resposta eu vou fazê-lo através de uma nova resposta .. I perceber que o seu atributo é chamado de "Nome", não é por acaso tentando fazer este tutorial? E é esta ação Editar você está tendo problemas com?

Uma vez que este é o mesmo problema exato mim e 2 dos meus colegas estão tendo. Aqui está uma explicação mais detalhada do problema:

Esta é a ação do 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();
    }
}

Quando os ApplyPropertyChanges é chamado um exceção é levantada. (InvalidOperationException) Mensagem de exceção:

{System.InvalidOperationException:. Será que o ObjectStateManager não conter uma ObjectStateEntry com uma referência a um objeto do tipo 'ContactManager.Models.Contact'
em System.Data.Objects.ObjectContext.ApplyPropertyChanges (String EntitySetName, Objeto alterado)
em ContactManager.Controllers.HomeController.Edit (Contact contactToEdit) em C: \ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controladores \ HomeController.cs: linha 65}

Quando eu adicionar esta linha antes ApplyPropertyChanges:

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

x contém uma entrada do tipo correto. ( depuração imagem )

Nota: Eu fiz um pequeno desvio do tutorial e colocar as entidades objeto em uma superclasse, então eu não tenho que declarar o mesmo objeto em todos os meus controladores. Mas o mesmo problema surge quando seguindo o tutorial.

Parece que o seu modelo não está preenchido corretamente no controlador. Há informações realmente não o suficiente na sua pergunta para descobrir o que exatamente está acontecendo embora errado.

Às vezes Modelo é nulo porque a instrução SELECT com a .FirstOrDefault() método não trouxe um objeto válido.

Você sempre pode mudar .FirstOrDefault() para .First() e recompilar a sua solução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top