none
DropDownListFor da erro System.NullReferenceException: RRS feed

  • Pergunta

  • Boa noite!

    Estou com um problema cabuloso, na hora que dou o post na view para o controller, da System.NullReferenceException nas minhas dropDownListFor mesmo elas exibindo os dados corretamente para o usuário.

    Minha viewModel:

    public class contaModel
        {
    
            public SelectList responsaveis { get; set; }
            public List<int> idResponsaveis { get; set; }
    
            public SelectList responsaveisCartao { get; set; }
            public List<int> idResponsaveisCartao { get; set; }
        }

    Depois instancio os valores na minha controller:

    public ActionResult Create()
            {
                contaModel model = new contaModel();
                   
                model.responsaveis = new SelectList(db.responsavelporconta, "IdResponsavelPorConta", "Nome");
                model.responsaveisCartao = new SelectList(db.responsavelporconta, "IdResponsavelPorConta", "Nome");
    
    
                return View(model);
            } 

    em seguida utilizo na view()

    <div id='div0'>
                        @Html.DropDownListFor(x => x.idResponsaveis, Model.responsaveis)
                    </div>
    
    <div id='cartao0'>
                    Numero: @Html.TextBox("numeroCartao")
                    Responsavel: @Html.DropDownListFor(x => x.idResponsaveisCartao, Model.responsaveisCartao)
                </div> 

    Ele exibe os dados corretamente, mas na hora de receber no controlle, da erro...

    sexta-feira, 5 de outubro de 2012 22:46

Respostas

Todas as Respostas

  • Dá erro no Responsável?

    O que você espera como parâmetro no controller? Um inteiro?

    Abraços,


    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net

    sexta-feira, 5 de outubro de 2012 23:55
  • Recebo um objeto do tipo contaModel.

    Mas no controller ele vem como "null" quando estou no debug, e ai da este erro.

    sábado, 6 de outubro de 2012 03:29
  • tem como vc colocar post do "Create", assim fica melhor pra poder ajudar.
    sábado, 6 de outubro de 2012 13:07
  • Opa, claro hehe, ai vai

    [HttpPost]
            public ActionResult Create(contaModel conta)
            {
                //tipos de conta
                // tipo = 2 > bancária
                //tipo = 3 > caixa
                if (ModelState.IsValid)
                {
                    contas novaConta = new contas();
                    novaConta.Nome = conta.nome;
                    novaConta.Tipo = conta.tipo;
                    novaConta.Banco = conta.banco;
                    novaConta.Agencia = conta.agencia;
                    novaConta.Conta = conta.conta;
    
                    //for (int i = 0; i < conta.idResponsaveis.Count; i++)
                    //{
                    //    responsavelporconta rp = db.responsavelporconta.Where(c => c.IdResponsavelPorConta == conta.idResponsaveis[i]).First();
                    //    novaConta.responsavelporconta.Add(rp);
                    //    db.contas.AddObject(novaConta);
                    //    db.SaveChanges();
                    //}
    
                    db.contas.AddObject(novaConta);
                    db.SaveChanges();
                   
                    //db.contas.AddObject(contas);
                    //db.SaveChanges();
                    //return RedirectToAction("Index");  
                }

    Ele fala que o objeto está null. E ao pausar o debug, da o erro citado acima.

    sábado, 6 de outubro de 2012 19:24
  • faz o seguinte teste.

    em sua view, estancia sua viewModel, exemplo:

    @model  MeuProjeto.UI.ViewModel.ContaViewModel

    agora quando vc for fazer uma expressão, coloca assim:

    <div id='div0'>
                        @Html.DropDownListFor(model => model.idResponsaveis)
                    </div>
    
    <div id='cartao0'>
                    Numero: @Html.TextBox("numeroCartao")
                    Responsavel: @Html.DropDownListFor(model => model.idResponsaveisCartao)
                </div> 

    e verifica se o post continua vindo null.


    segunda-feira, 8 de outubro de 2012 11:32
  • Usa int em vez de List<int> se você for receber somente um valor.

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    segunda-feira, 8 de outubro de 2012 11:49
  • O objeto "conta" vem Null?

    Abraços,


    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net

    segunda-feira, 8 de outubro de 2012 17:29
  • Mas Murilo eu realmente quero receber mais de um valor hehe.

    Sim André, ele está retornando null.

    segunda-feira, 8 de outubro de 2012 22:33
  • Mas Murilo eu realmente quero receber mais de um valor hehe.

    Sim André, ele está retornando null.


    Kakashi963, você tentou o que falei pra você?
    terça-feira, 9 de outubro de 2012 11:00
  • Na sua View, onde está sua tag Form?

    Você deve ter algo parecido com:

    @using(Html.BeginForm()){

    }

    Se não tiver esta TAG com os campos dentro, ele vai retornar null para seu controller.

    Abracos,


    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net

    terça-feira, 9 de outubro de 2012 11:19
  • Acabei retornando a controller apenas um formCollection e deu certo. Mondei minha classe baseado nos atributos desse form.
    segunda-feira, 15 de outubro de 2012 12:56