ASP.NET dropdown cascade na edit view

25/09/2018

6

Bom dia, estou com uma rotina funcionando perfeitamente na view Create que quando seleciono o estado em um dropdown carrega as cidades no outro dropdown. O problema é quando vou para a view Edit, que a cidade não aparece selecionada no index correto.
Por exemplo, criei um novo registro com EstadoId = 2 e CidadeId = 5 (grava corretamente no banco de dados), quando vou no editar o EstadoId esta selecionado corretamente mas o CidadeId fica no primeiro da lista.

Segue o HTML:
@Html.DropDownListFor(model => model.CidadeId, new SelectList(" "), "", new { @class = "form-control w-100" })

Segue a parte do javascript:
<script>
        $(document).ready(function () {

            buscaCidades();

            $("#EstadoId").change(buscaCidades);


            function buscaCidades() {
                $("#CidadeId").empty();
                $.ajax({
                    type: 'POST',
                    url: '@Url.Action("GetCidades")',
                    dataType: 'json',
                    data: { id: $("#EstadoId").val() },

                    success: function (cidades) {
                        $.each(cidades, function (index, row) {
                            $("#CidadeId").append('<option value="' + row.value + '">' + row.text + '</option>');
                        });
                    }
                });
                return false;
            };
        });
    </script>


O que posso fazer para selecionar a cidade no index correto na view edit?
Responder

Posts

Consegui resolver depois de um tempo e se ajudar alguém vou passar o que fiz:

Passei a lista de cidades pelo ViewBag testando se ele é nulo e tirei o buscaCidades() da linha 4 do código javascript acima.

 @if (ViewBag.Cidades == null)
{
<select class="form-control w-100" asp-for="CidadeId" id="CidadeId"
asp-items="@(new SelectList(string.Empty, "Id", "Nome"))"></select>
}
else
{
<select class="form-control w-100" asp-for="CidadeId" id="CidadeId"
asp-items="@(new SelectList(ViewBag.Cidades, "Id", "Nome"))"></select>
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar