none
Listbox do MVC não estão aparecendo no formcollection RRS feed

  • Pergunta

  • olá.

    Tenho seguinte cenário: duas listbox onde a primeira contém todas turmas cadastradas no banco de dados. Na segunda é vazia e deverá conter apenas as turmas que forem relacionadas ao curso.

    <tr>
    
                    <td>
    
                        @Html.ListBox("LstTurmas", new MultiSelectList((IEnumerable<SelectListItem>)ViewData["Turmas"], "Value", "Text"), new { id = "LstTurmas", multiple = "multiple", style = "width:200px; height:200px" })
    
                    </td>
    
                    <td align="center" style="vertical-align: middle">
    
                        <div>
    
                            <input type="button" id="btnSelecionar" value=">>" onclick="javascript:SelecionarTurmas();" />
    
                        </div>
    
                        <div>
    
                            <input type="button" id="btnRemover" value="<<" onclick="javascript:RemoverTurmas();" />
    
                        </div>
    
                    </td>
    
                    <td>
    
                        @Html.ListBoxFor(model => model.CursoTurmas, new MultiSelectList((IEnumerable<SelectListItem>)ViewData["CursoTurmas"], "Value", "Text"), new { id = "LstTurmaSelecionada", multiple = "multiple", style = "width:200px; height:200px" })
    
                    </td>
    
                </tr>
    


    Tenho dois botões que movimentam os itens entre estas duas listas com o seguinte javascript:

        function SelecionarTurmas() {
            var lstTurmas = document.getElementById("LstTurmas");
            var lstTurmasSel = document.getElementById("LstTurmaSelecionada");
            var i;
            for (i = 0; i < lstTurmas.options.length; i++) {
                if (lstTurmas.options[i].selected == true) {
                    var op = document.createElement("OPTION");
                    op.text = lstTurmas.options[i].text;
                    op.value = lstTurmas.options[i].value;
                    lstTurmasSel.options.add(op);
                    lstTurmas.options.remove(i);
                    i--;
    
                }
            }
        }
            function RemoverTurmas() {
            var lstTurmas = document.getElementById("LstTurmas");
            var lstTurmasSel = document.getElementById("LstTurmaSelecionada");
            var i;
            for (i = 0; i < lstTurmasSel.options.length; i++) {
                if (lstTurmasSel.options[i].selected == true) {
                    var op = document.createElement("OPTION");
                    op.text = lstTurmasSel.options[i].text;
                    op.value = lstTurmasSel.options[i].value;
                    lstTurmas.options.add(op);
                    lstTurmasSel.options.remove(i);
                    i--;
    
                }
            }
    


    Quando dou um post no meu formulário para enviar ao controller e fazer a gravação dos dados, os listbox (ambos) não estão aparecendo no formcollection do método.

    O que estou fazendo de errado?

    Ps.: Estou usando mvc3 com razor


    Sérgio Rezende Júnior Msn: Sérginho_jr@hotmail.com Email: sergio.rezende@mcom.com.br
    terça-feira, 27 de dezembro de 2011 15:46

Respostas

  • Meus caros.

    Consegui solucionar esta questão colocando um campo hiden e criando um array com cada item que é selecionado. Desta forma este campo hiden aparece no momento do meu post e eu trabalho o array que recebo no controller.

    Faço a inserção de todos os itens dentro de um foreach.

    Agradeço a todos pela ajuda.

     

    Obs.: Implementei esta solução neste final de semana.


    Sérgio Rezende Júnior Msn: Sérginho_jr@hotmail.com Email: sergio.rezende@mcom.com.br
    segunda-feira, 9 de janeiro de 2012 12:17

Todas as Respostas

  • Olá Sérgio,

     

    Não tenho certeza quanto ao MVC3, mas acho que é a mesma coisa.

    Para submeter campos ao servidor, imforme a tag NAME no input, caso contrário o input não será postado.

    No htmlAttributes, informe a tag Name e faça o teste.

     

     

    terça-feira, 27 de dezembro de 2011 17:08
  • Fernando boa tarde.

    Também não é esta opção, pois tentei adicionar a tag name nas opções de html e não funcionou.

    Quando trabalho apenas com a listbox a primeira informação a ser passada como parâmetro é o nome do componente na renderização em html.

     


    Sérgio Rezende Júnior Msn: Sérginho_jr@hotmail.com Email: sergio.rezende@mcom.com.br
    quarta-feira, 28 de dezembro de 2011 15:17
  • Sim fernado você esta correto quanto ao name.

    • Editado Alexis Moura quarta-feira, 28 de dezembro de 2011 16:18
    quarta-feira, 28 de dezembro de 2011 16:18
  • Um conselho de preferencias a algum framework para javaScript pode facilitar e muito sua vida.
    quarta-feira, 28 de dezembro de 2011 16:21
  • Olá sérgio voce poderia postar o código do seu controller para facilitar a ajuda?
     
    Atenciosamente:
     
    Edney Batista da Silva - Desenvolvedor .Net, C#, Asp.Net, Java, SQL
     
    CONTATOS:
     
    Hotmail:
    edney_contato@hotmail.com
    Skype: edney.dyn

    sábado, 7 de janeiro de 2012 01:41
  • Meus caros.

    Consegui solucionar esta questão colocando um campo hiden e criando um array com cada item que é selecionado. Desta forma este campo hiden aparece no momento do meu post e eu trabalho o array que recebo no controller.

    Faço a inserção de todos os itens dentro de um foreach.

    Agradeço a todos pela ajuda.

     

    Obs.: Implementei esta solução neste final de semana.


    Sérgio Rezende Júnior Msn: Sérginho_jr@hotmail.com Email: sergio.rezende@mcom.com.br
    segunda-feira, 9 de janeiro de 2012 12:17
  • Olá

     

    Sei que ja resolveu,   mas no caso acima, acho que voce deve receber os dados da lista não somente pelo nome,   pois recebe um array na verdade.

     

     


    http://fparmezani.wordpress.com
    domingo, 15 de janeiro de 2012 20:26