none
Preencher um "DropDown" (this.AutoSelect) a partir da seleção de outro "DropDown" (this.AutoSelect) RRS feed

  • Pergunta

  • Galera, preciso trazer as cidades de um determinado estado assim que o usuário selecionar o estado e não estou conseguindo, alguém tem alguma dica, por favor? Segue o código abaixo

    View - Aqui são os AutoSelect, especíe de DropDownList (pelo menos na tela é igual)

                      <div class="col-lg-2">
                            <div class="form-group">
                                <label class="control-label">
                                    Departamento:
                                </label>
                                <div id="EstadoDifBrasil">
                                    @this.AutoSelect(x => x.StatePar).Class("form-control required").FirstOption("", "Selecione uma opção")
                                </div>
                            </div>
                        </div>
                        <div class="col-lg-3">
                            <div class="form-group">
                                <label class="control-label">
                                    Cidade:
                                </label>
                                <div id="CidadeDifBrasil">
                                    @this.AutoSelect(x => x.CityPar).Class("form-control required").FirstOption("", "Selecione uma opção")
                                </div>
                            </div>
                        </div>

    JavaScrip na VIEW

            $("#StatePar").change(function () {
                var local = $(this).parents("div.EstadoDifBrasil");
                var id = $("#StatePar").val();
                $.post("@Url.Action(MVC.Escritorio.Clientes.VerificarCidadeDiferenteBrasil())", { codigoEstadoPar: id })
                    .done(function (data) {
                    });
            });

    Controller

            [HttpPost]
            public virtual ActionResult VerificarCidadeDiferenteBrasil(int codigoEstadoPar)
            {
                return RedirectToAction(MVC.Escritorio.Clientes.MeusDadosPessoais(codigoEstadoPar));
            }

            [RequiresAuthorization]
            [ActionName("meus-dados-pessoais")]
            public virtual ActionResult MeusDadosPessoais(int parametroTeste = 0)
            {
                var franqueado = (TClient)ViewBag.Franqueado;
          
                ViewBag.Country = TCountries.ListAllCountries().OrderBy(x => x.NameCountry).ToSelectList(x => x.CodCountryBC, x => x.NameCountry);
                franqueado.Country = franqueado.CurrentAddress.City.State.Country;

                if (ViewBag.Country != null)
                {
                    for (int i = 0; i < ViewBag.Country.Count; i++)
                    {
                        if (ViewBag.Country[i].Text == "Paraguai")
                        {
                            ViewBag.StatePar = TState.ListAllStates().Where(x => x.Country.CodCountryBC.ToString() == ViewBag.Country[i].Value).ToSelectList(x => x.Id, x => x.Name);
                            if (parametroTeste != 0)
                            {
                                var xpto = ViewBag.StatePar;
                                ViewBag.CityPar = TCity.ListAllCities().Where(x => x.State.Id == parametroTeste).OrderBy(x => x.Name).ToSelectList(x => x.Id, x => x.Name);
                            }
                        }
                    }
                }
                return View(franqueado);
            }

    segunda-feira, 17 de outubro de 2016 15:50

Todas as Respostas

  • Felipe, veja neste link como criar um dropdown em cascata.

    http://www.c-sharpcorner.com/uploadfile/4d9083/creating-simple-cascading-dropdownlist-in-mvc-4-using-razor/

    Basicamente você terá que criar uma nova action em sua controller que retorne o itens do segundo dropdown como JSON, daí via jQuery (acredito que seja para isto o javascript que você exibiu) você irá ler a resposta em JSON e agregar os itens ao dropdown.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 17 de outubro de 2016 16:41
  • Juliano,

    Primeiramente obrigado pela ajuda!

    Estou com dificuldade agora para verificar se está retornando a minha lista de cidades, de acordo com o estado selecionado, e se está retornando, como inseri-lá no campo de cidades. Consegue me ajudar, por favor? Estou com o seguinte código:

    VIEW

            $("#StatePar").change(function () {
                //var local = $(this).parents("div.EstadoDifBrasil");
                var idStatePar = $("#StatePar").val();
                //var idCountry = $("#Country").val();
                $.post("@Url.Action(MVC.Escritorio.Clientes.VerificarCidadeDifBr())", { codCitySel: idStatePar })
                    .done(function (data) {
                    });
            });

    CONTROLLER

            public virtual ActionResult VerificarCidadeDifBr(int codCitySel)
            {
                var xpto = new List<TCity>();

                xpto = TCity.ListAllCities().Where(x => x.State.Id == codCitySel).OrderBy(x => x.Name).ToList(); //.ToSelectList(x => x.Id, x => x.Name);

                return Json(xpto);
            }

    Da VIEW para o CONTROLLER está indo, pois está entrando no método VerificarCidadeDifBr e consigo depurar o código, a lista é criada na variável xpto, porém não consigo ver o retorno.

    Obrigado!

    segunda-feira, 17 de outubro de 2016 18:45
  • Verifique a quantidade de itens retornados na função done do $.post:

    // ...
    .done(function (data) {
        alert(data.length);
    });

    Se estiver retornando, você só precisará fazer um loop (seja javascript ou o $.each do jQuery) para agregar ao dropdown.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por um acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 17 de outubro de 2016 19:03
  • Não está retornando =/

    Tens alguma sugestão?

    Modifiquei o código e nada

    VIEW

            $("#StatePar").change(function () {
                var idStatePar = $("#StatePar").val();
                //var idCountry = $("#Country").val();
                $.post("@Url.Action(MVC.Escritorio.Clientes.VerificarCidadeDifBr())", { codCitySel: idStatePar })
                    .done(function (data) {
                        alert(data.length);
                    })
                    .error(function (ex) {
                        alert('Vc está fazendo alguma ca****, jovem rapaz!' + ex);
                    })
            });

    CONTROLLER

            [HttpPost]
            public virtual ActionResult VerificarCidadeDifBr(int codCitySel)
            {
                var xpto = new List<TCity>();

                xpto = TCity.ListAllCities().Where(x => x.State.Id == codCitySel).OrderBy(x => x.Name).ToList(); //.ToSelectList(x => x.Id, x => x.Name);

                return Json(xpto, JsonRequestBehavior.AllowGet);
            }

    segunda-feira, 17 de outubro de 2016 19:44