none
Ajuda - Referência de objeto não definida para uma instância de um objeto. RRS feed

  • Pergunta

  • Estou trabalhando em uma aplicação Asp.Net MVC4 e quando vou inserir os valores de dois dropdowns aparece o seguinte erro:

    Erro de Servidor no Aplicativo '/'.
    
    Referência de objeto não definida para uma instância de um objeto.
    
    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 
    
    Detalhes da Exceção: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.
    
    Erro de Origem: 
    
    
    Linha 13:             var strQuery = " ";
    Linha 14:             strQuery += " INSERT INTO QUESTAO (CARGOID, BANCAID)";
    Linha 15:             strQuery += string.Format(" VALUES ('{0}', '{1}')", questao.Cargo.CargoId, questao.Banca.BancaId);
    Linha 16:             contexto.ExecutaComando(strQuery);
    Linha 17:         }
    
    Arquivo de Origem: c:\Users\AyslanRodrigo\Desktop\SistemaTcc\SistemaDeQuestoes\SistemaDeQuestoes.Aplicacao\QuestaoAplicacao.cs    Linha: 15 
    A minha View:
    @model SistemaDeQuestoes.Dominio.Questao
    @{
        ViewBag.Title = "Cadastrar";
    }
    <h2>Cadastrar</h2>
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
    
        <fieldset>
            <div class="editor-label">
                @Html.LabelFor(model => model.CargoId)
            </div>
            <div class="editor-field">
                @Html.DropDownList("CargoId", (SelectList)ViewBag.ListaDeCargos)
                @Html.ValidationMessageFor(model => model.CargoId)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.BancaId)
            </div>
            <div class="editor-field">
                @Html.DropDownList("BancaId", (SelectList)ViewBag.ListaDeBancas)
                @Html.ValidationMessageFor(model => model.BancaId)
            </div>
            <p>
                <input type="submit" value="Cadastrar" />
                @Html.ActionLink("Cancelar", "Index")
            </p>
        </fieldset>
    }
    
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

    Meu Controller

    using System.Web.Mvc;
    using SistemaDeQuestoes.Aplicacao;
    using SistemaDeQuestoes.Dominio;
    
    namespace SistemaDeQuestoes.UI.Web.Controllers
    {
        public class QuestoesController : Controller
        {
            //
            // GET: /Questoes/
    
            public ActionResult Index()
            {
                var aplicacao = new QuestaoAplicacao();
                var listaQuestao = aplicacao.ListarTodos();
                return View(listaQuestao);
            }
    
            public ActionResult Cadastrar()
            {
    
                var aplicacaoCargo = new CargoAplicacao();
                ViewBag.ListaDeCargos = new SelectList(
                    aplicacaoCargo.ListarTodos(),
                    "CargoId",
                    "NomeCargo"
                    );
    
                var aplicacaoBanca = new BancaAplicacao();
                ViewBag.ListaDeBancas = new SelectList(
                    aplicacaoBanca.ListarTodos(),
                    "BancaId",
                    "SiglaBanca"
                    );
    
                return View();
            }
    
            [HttpPost]
            public ActionResult Cadastrar(Questao questao)
            {
                if (ModelState.IsValid)
                {
                    var aplicacao = new QuestaoAplicacao();
                    aplicacao.Inserir(questao);
                    return RedirectToAction("Index");
                }
                return View(questao);
            }  
    }
    }    
    

    e a aplicacao:

    using System.Collections.Generic;
    using System.Data.SqlClient;
    using SistemaDeQuestoes.Dominio;
    using SistemaDeQuestoes.Repositorio;
    
    namespace SistemaDeQuestoes.Aplicacao
    {
        public class QuestaoAplicacao
        {
            private readonly Contexto contexto = new Contexto();
            public void Inserir(Questao questao)
            {
                var strQuery = " ";
                strQuery += " INSERT INTO QUESTAO (CARGOID, BANCAID)";
                strQuery += string.Format(" VALUES ('{0}', '{1}')", questao.Cargo.CargoId, questao.Banca.BancaId);
                contexto.ExecutaComando(strQuery);
            }
    
    public List<Questao> ListarTodos()
            {
                var strQuery = " ";
                strQuery += " SELECT QUESTAO.QUESTAOID, CARGO.CARGOID, CARGO.NOMECARGO, BANCA.BANCAID, BANCA.SIGLABANCA, USUARIO.USUARIOID, USUARIO.NOMEUSUARIO, DISCIPLINA.DISCIPLINAID, DISCIPLINA.NOMEDISCIPLINA, ASSUNTO.ASSUNTOID, ASSUNTO.NOMEASSUNTO, INSTITUICAO.INSTITUICAOID, INSTITUICAO.SIGLAINSTITUICAO, ESTADO.ESTADOID, ESTADO.UF, CIDADE.CIDADEID, CIDADE.NOMECIDADE, QUESTAO.QUESTAO, QUESTAO.ANO, QUESTAO.NIVEL, QUESTAO.MODALIDADE, QUESTAO.USUARIOAUTOR ";
                strQuery += " FROM QUESTAO,CARGO,BANCA,USUARIO,DISCIPLINA,ASSUNTO,INSTITUICAO,ESTADO,CIDADE ";
                strQuery += " WHERE QUESTAO.CARGOID=CARGO.CARGOID AND QUESTAO.BANCAID=BANCA.BANCAID AND QUESTAO.USUARIOID=USUARIO.USUARIOID AND QUESTAO.DISCIPLINAID=DISCIPLINA.DISCIPLINAID AND QUESTAO.ASSUNTOID=ASSUNTO.ASSUNTOID AND QUESTAO.INSTITUICAOID=INSTITUICAO.INSTITUICAOID AND QUESTAO.ESTADOID=ESTADO.ESTADOID AND QUESTAO.CIDADEID=CIDADE.CIDADEID ";
                var retorno = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retorno);
            }
    
     private List<Questao> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
            {
                var produtos = new List<Questao>();
                while (reader.Read())
                {
                    var tempObjeto = new Questao
                    {
                        QuestaoId = int.Parse(reader["QUESTAOID"].ToString()),
    
                        Cargo = new Cargo()
                        {
                            CargoId = int.Parse(reader["CARGOID"].ToString()),
                            NomeCargo = reader["NOMECARGO"].ToString(),
                        },
                        Banca = new Banca()
                        {
                            BancaId = int.Parse(reader["BANCAID"].ToString()),
                            SiglaBanca = reader["SIGLABANCA"].ToString(),
                        },
                        Usuario = new Usuario()
                        {
                            UsuarioId = int.Parse(reader["USUARIOID"].ToString()),
                            NomeUsuario = reader["NOMEUSUARIO"].ToString(),
                        },
                        Disciplina = new Disciplina()
                        {
                            DisciplinaId = int.Parse(reader["DISCIPLINAID"].ToString()),
                            NomeDisciplina = reader["NOMEDISCIPLINA"].ToString(),
                        },
                        Assunto = new Assunto()
                        {
                            AssuntoId = int.Parse(reader["ASSUNTOID"].ToString()),
                            NomeAssunto = reader["NOMEASSUNTO"].ToString(),
                        },
                        Instituicao = new Instituicao()
                        {
                            InstituicaoId = int.Parse(reader["INSTITUICAOID"].ToString()),
                            SiglaInstituicao = reader["SIGLAINSTITUICAO"].ToString(),
                        },
    
                        EstadoId = int.Parse(reader["ESTADOID"].ToString()),
                        CidadeId = int.Parse(reader["CIDADEID"].ToString()),
                        CorpoQuestao = reader["QUESTAO"].ToString(),
                        Ano = int.Parse(reader["ANO"].ToString()),
                        Nivel = reader["NIVEL"].ToString(),
                        Modalidade = reader["MODALIDADE"].ToString(),
                        UsuarioAutor = bool.Parse(reader["USUARIOAUTOR"].ToString())
                    };
                    produtos.Add(tempObjeto);
                }
                return produtos;
            }
        }
    }
    }
    }

    Domínio:

    namespace SistemaDeQuestoes.Dominio
    {
        public class Questao
        {
            public int QuestaoId { get; set; }
            public int CargoId { get; set; }
            public int BancaId { get; set; }
        }
    }

    terça-feira, 18 de fevereiro de 2014 12:46

Respostas

  • Bom. Faça um metodo na sua camada de negocio.

    Dessa Forma:

    public SelectList CarregarBancas(){
       return new SelectList(suaCamadaDeRepositorio.SeuMetodoQueListaAsBancas(), "BancaID", "BancaTitulo");
    }
              
    
    Na sua Controller: 
    
     ViewBag.ListaDeBancas = SuaCamadaDeNegocio.CarregarBancas();

    Anderson Anzileiro.




    terça-feira, 18 de fevereiro de 2014 14:14

Todas as Respostas

  • Bom dia Ayslan Rodrigo Andretta. Blz.

    @Html.DropDownListFor(model => model.BancaId, new SelectList(ViewBag.ListaDeBancas , "Value" , "Text"), "Selecione...", new {@class = "form-control"})

    Use o : DropDownListFor

    Pois assim você popula sua propriedade BancaId. Assim não acontece o null reference. 

    Valeu, Qualquer dúvida, estamos aqui na Comunidade MSDN.

    "Ajudar o próximo é ajudar a sí mesmo... Abraços."

    Anderson Anzileiro.


    terça-feira, 18 de fevereiro de 2014 13:42
  • Aparece esse erro agora:

    Erro de Servidor no Aplicativo '/'.
    
    Valor não pode ser nulo.
    Nome do parâmetro: items
    
    Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 
    
    Detalhes da Exceção: System.ArgumentNullException: Valor não pode ser nulo.
    Nome do parâmetro: items
    
    Erro de Origem: 
    
    
    Linha 13:         </div>
    Linha 14:         <div class="editor-field">
    Linha 15:             @Html.DropDownListFor(model => model.Cargo.CargoId, new SelectList(ViewBag.ListaDeCargos, "Value", "Text"), "Selecione...", new { @class = "editor-field" })
    Linha 16: 
    Linha 17:         </div>
    
    Arquivo de Origem: c:\Users\AyslanRodrigo\Desktop\SistemaTcc\SistemaDeQuestoes\SistemaDeQuestoes.UI.Web\Views\Questoes\Cadastrar.cshtml    Linha: 15 
    

    terça-feira, 18 de fevereiro de 2014 13:55
  • Bom. Faça um metodo na sua camada de negocio.

    Dessa Forma:

    public SelectList CarregarBancas(){
       return new SelectList(suaCamadaDeRepositorio.SeuMetodoQueListaAsBancas(), "BancaID", "BancaTitulo");
    }
              
    
    Na sua Controller: 
    
     ViewBag.ListaDeBancas = SuaCamadaDeNegocio.CarregarBancas();

    Anderson Anzileiro.




    terça-feira, 18 de fevereiro de 2014 14:14