none
Pegar valor do ID do drop down RRS feed

  • Pergunta

  • Bom dia,

    tenho a view abaixo, o primeiro derop down recebe uma lista de paises e com base no pais selecionado é retornado os estados desse pais via ajax, mas no segundo dropdown ao inves dele passar o ID do estado que está no drop down ele passa o nome do estado.

    @model Projeto_P1.Models.Cidade
    @{
        ViewBag.Title = "Cadastro de Cidades";
    }
    
    @using (Html.BeginForm("AddCidade", "Geral", FormMethod.Post))
    {
        <div class="container">
            <fieldset>
                <div>
                    @Html.Label("Cidade")
                    @Html.EditorFor(model => model.Nome)
                </div>
                <div>
                    @Html.Label("País")
                    @Html.DropDownList("Pais", (SelectList)ViewData["paises"], "Selecione", new { id = "PaisID"})
                </div>
                <div>
                    @Html.Label("Estado")
                    @Html.DropDownList("Estado", Enumerable.Empty<SelectListItem>(), "Selecione")
                </div>
                
                <br />
    
                <input type="submit" value="Cadastrar" />
            </fieldset>
        </div>
    }
    
    <script type="text/javascript">
        $(document).ready(function () {
            $("#PaisID").change(function () {
                $.ajax({
                    url: "ListaEstados",
                    type: 'POST',
                    data: { ID: $(this).val() },
                    datatype: 'json',
                    success: function (data) {
                        var elements = "";
                        $.each(data, function () {
                            elements = elements + '<option values="' + this.ID + '">' + this.Nome + '</option>'
                        })
                        $('#Estado').empty().attr('disabled', false).append(elements);
                    }
                });
            });
        });
    </script>

     
    terça-feira, 27 de maio de 2014 13:16

Respostas

  • Cesar, boa tarde.

    Por acaso o seu método ListaEstados realmente está retornando os Ids dos estados corretamente ?

    Aliás, você colocou <option values>

    não seria:

    <option value="...">

    ?

    Verifica lá e poste aqui os resultados.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.


    terça-feira, 27 de maio de 2014 19:26

Todas as Respostas

  • http://msdn.microsoft.com/en-us/library/system.web.mvc.html.selectextensions_methods(v=vs.118).aspx

    A propriedade Estado tem que ser o value do SelectListItem

     @Html.DropDownList("Estado", Enumerable.Empty<SelectListItem>(), "Selecione")


    terça-feira, 27 de maio de 2014 14:02
  • Cesar,

    desculpe mas não entendi.

    terça-feira, 27 de maio de 2014 14:49
  • No SelectItem você tem 3 propriedades, selected, value e text, vamos supor que tenha uma lista com o seguinte Text = "São Paulo" e Value = 1 e apenas um item na lista.

    Você vai precisar que sua propriedade na model seja um int e tenha o nome Estado e no post você recebe o valor

    http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc

    terça-feira, 27 de maio de 2014 15:09
  • Mas é assim que está, na minla classe cidade a propriedade que deve receber o estado se chama Estado e é do tipo int, mas veja como o controller recebe o objeto cidade.

    classe cidade:

        public class Cidade
        {
            public int ID { get; set; }
            public String Nome { get; set; }
            public int Estado { get; set; }
            public int Pais { get; set; }

    terça-feira, 27 de maio de 2014 16:42
  • Faça um teste por gentileza, verifique se isso funciona dentro da action:

    int estado = int.Parse(Request.Form["Estado"]);


    Dependendo do resultado o que pode estar errado é o atributo 'name' do elemento 'select' no html gerado.
    terça-feira, 27 de maio de 2014 17:22
  • Raphael,

    eu jé testei assim, foi aí que vi q ele tava trazendo o nome, por que quando fiz a conversão para int deu erro aí coloquei em uma var String pra ver, e ele trazia o nome do estado.

    terça-feira, 27 de maio de 2014 17:30
  • To colocando da forma que eu uso e funciona 

    TipoCadastroSelecionado = tipo long na model

    TipoCadastro = tipo Dictionary<long,string>

                            @Html.DropDownListFor(m => m.TipoCadastroSelecionado, new SelectList(Model.TipoCadastro, "Key", "Value"), new { @class = "col-xs-12 col-sm-12 col-md-10" })

    terça-feira, 27 de maio de 2014 18:18
  • Cesar, boa tarde.

    Por acaso o seu método ListaEstados realmente está retornando os Ids dos estados corretamente ?

    Aliás, você colocou <option values>

    não seria:

    <option value="...">

    ?

    Verifica lá e poste aqui os resultados.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.


    terça-feira, 27 de maio de 2014 19:26
  • Diego, 

    era isso mesmo cara, tinha esse maldito S no final e nau vi. Obrigado.

    terça-feira, 27 de maio de 2014 20:50