none
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Pais' RRS feed

  • Pergunta

  • Bom dia,

    Estou com o problema acima quando envio o Form para o Controller, é um cadastro de cidade onde tenho dois DropDownList de país e estado, o estado é preenchido com base na seleção do pais via ajax, abaixo segue o codigo.

    View:

    @model Projeto_P1.Models.Cidade
    @{
        ViewBag.Title = "ACadastro 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["pais"], "Selecione", new { id = "PaisID"})
                </div>
                <div>
                    @Html.Label("Estado")
                    @Html.DropDownList("ID", 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>'
                        })
                        $('#ID').empty().attr('disabled', false).append(elements);
                    }
                });
            });
        });
    </script>

    Controller:

            public ActionResult AddCidade()
            {
                ViewData["pais"] = new SelectList(Util.getPais().ToList(), "ID", "Nome");
                return View();
            }

    sexta-feira, 23 de maio de 2014 13:31

Respostas

  • Resolvi este problema, segue o codigo que está funcionando para quem precisar.

    No controller.

            public ActionResult AddCidade()
            {
                ViewData["paises"] = new SelectList(Util.getPais().ToList(), "ID", "Nome");
                return View();
            }
    
            [HttpPost]
            public JsonResult ListaEstados(String id)
            {
                var estados = Util.getEstados(id); 
                return Json(estados);
            }
    
            [HttpPost]
            public ActionResult AddCidade(Cidade c)
            {
                c.Cadastrar(c);
                return RedirectToAction("AddCidade");
            }

    View

    @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.DropDownListFor(model => model.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 value="' + this.ID + '">' + this.Nome + '</option>'
                        })
                        $('#Estado').empty().attr('disabled', false).append(elements);
                    }
                });
            });
        });
    </script>


    quarta-feira, 28 de maio de 2014 11:33