none
Dropdownlist carregar tipado RRS feed

  • Pergunta

  • Estou fazendo e ocorre erro dizendo que não aceita valor nulo.

    A estrutura é a seguinte:

    View partial tipada

    @model Models.TpNegocio
    
    @Html.DropDownListFor(model => model.codigo, new SelectList((ViewBag.TipoNegocio) as SelectList, "codigo", "descricao"), "Select")

    View Index

    @Html.Partial("~/Views/Dropdown/ddlTpNegocio.cshtml");

    Controller

    public ActionResult Index()
            {
                ViewBag.TipoNegocio = new Models.TpNegocio().Listar().ToList();
                return View();
            }

    Detalhe a consulta funciona, popula direitinho o ViewBag, o erro ocorre ao carregar a View Partial.

    Na verdade, eu acho que o que esta faltando é popular o Html.Partial antes de rederinzar.


    • Editado CEFL quinta-feira, 19 de junho de 2014 18:47
    quinta-feira, 19 de junho de 2014 17:13

Respostas

  • Opa, beleza brother? vamos lá, usando Ajax e jQuery!

    Vou postar um exemplo onde existe um DropDownList Regiao e conforme a região que escolho, eu listo numa outra DropDownList os bairros daquela região...

    Passo 1 - Método no Controller

      [HttpPost]
            public JsonResult RetornarBairros(int idRegiao)
            {
                var bairrosReturn = repositoryBairro.Bairros.Where(x => x.IdRegiao == idRegiao).ToList();
    
                List<SelectListItem> lista = new List<SelectListItem>();
    
    
                foreach (var item in bairrosReturn)
                {
                    SelectListItem listItem = new SelectListItem();
                    listItem.Text = item.NomeBairro.ToString();
                    listItem.Value = item.IdBairro.ToString();
                    lista.Add(listItem);
                }
                return Json((IEnumerable)lista);
    
            }

    Passo 2 - Código jQuey - Ajax

    $(document).ready(function () {
    
    
        function obterBairros() {
            var elements = "";
    
            if ($('#IdRegiao').val() == "0") {
                elements = elements + '<option value="">Bairros...</option>'
                $('#IdBairro').empty().attr('disabled', true).append(elements);;
    
            }
            else {
                $.ajax({
                    url: "/Empresa/RetornarBairros",
                    type: 'POST',
                    data: { idRegiao: $('#IdRegiao').val() },
                    datatype: 'json',
                    success: function (data) {
                        $.each(data, function () {
                            elements = elements + '<option value="' + this.Value + '">' + this.Text + '</option>'
                        })
                        $('#IdBairro').empty().attr('disabled', false).append(elements);
                    }
                });
            }
        }
    
    
        $("#IdRegiao").change(function () {
            obterBairros();//Conforme mudo a Regiao, listo os bairros via Ajax
        });
    
    
    });

    Passo 3 - Código da View

      <div class="form-group">
            @Html.LabelFor(model => model.IdBairro, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.DropDownList("IdBairro", Enumerable.Empty<SelectListItem>(), "Bairros...", new { @disabled = "disabled", @class = "form-control" })
    
            </div>
        </div>

    Qualquer coisa, dá um toque, abraço!!!

    • Marcado como Resposta CEFL terça-feira, 24 de junho de 2014 12:04
    sábado, 21 de junho de 2014 00:16

Todas as Respostas

  • Olá...consegue fazer dessa forma??

    1 - Código no Controller.

      var cursos = cursoRepository.Cursos.OrderBy(c => c.DescricaoCurso).ToList();
                cursos.Insert(0, new Curso
                {
                    IdCurso = 0,
                    DescricaoCurso = "Selecionar Todos"
                });
                ViewBag.Cursos = cursos;

    2 - Código na View

     <div class="editor-label">
            Curso
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(c => c.IdCurso, new SelectList(ViewBag.Cursos, "IdCurso", "DescricaoCurso"))
            @Html.ValidationMessageFor(c => c.IdCurso)
        </div>

    Se não rolar, dá um toque, abraço!

    quinta-feira, 19 de junho de 2014 22:57
  • Tem como eu faço sem usar o ViewBag, populando direto o Models, como é feito usando o Ajax ou jQuery?
    sexta-feira, 20 de junho de 2014 21:22
  • Opa, beleza brother? vamos lá, usando Ajax e jQuery!

    Vou postar um exemplo onde existe um DropDownList Regiao e conforme a região que escolho, eu listo numa outra DropDownList os bairros daquela região...

    Passo 1 - Método no Controller

      [HttpPost]
            public JsonResult RetornarBairros(int idRegiao)
            {
                var bairrosReturn = repositoryBairro.Bairros.Where(x => x.IdRegiao == idRegiao).ToList();
    
                List<SelectListItem> lista = new List<SelectListItem>();
    
    
                foreach (var item in bairrosReturn)
                {
                    SelectListItem listItem = new SelectListItem();
                    listItem.Text = item.NomeBairro.ToString();
                    listItem.Value = item.IdBairro.ToString();
                    lista.Add(listItem);
                }
                return Json((IEnumerable)lista);
    
            }

    Passo 2 - Código jQuey - Ajax

    $(document).ready(function () {
    
    
        function obterBairros() {
            var elements = "";
    
            if ($('#IdRegiao').val() == "0") {
                elements = elements + '<option value="">Bairros...</option>'
                $('#IdBairro').empty().attr('disabled', true).append(elements);;
    
            }
            else {
                $.ajax({
                    url: "/Empresa/RetornarBairros",
                    type: 'POST',
                    data: { idRegiao: $('#IdRegiao').val() },
                    datatype: 'json',
                    success: function (data) {
                        $.each(data, function () {
                            elements = elements + '<option value="' + this.Value + '">' + this.Text + '</option>'
                        })
                        $('#IdBairro').empty().attr('disabled', false).append(elements);
                    }
                });
            }
        }
    
    
        $("#IdRegiao").change(function () {
            obterBairros();//Conforme mudo a Regiao, listo os bairros via Ajax
        });
    
    
    });

    Passo 3 - Código da View

      <div class="form-group">
            @Html.LabelFor(model => model.IdBairro, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.DropDownList("IdBairro", Enumerable.Empty<SelectListItem>(), "Bairros...", new { @disabled = "disabled", @class = "form-control" })
    
            </div>
        </div>

    Qualquer coisa, dá um toque, abraço!!!

    • Marcado como Resposta CEFL terça-feira, 24 de junho de 2014 12:04
    sábado, 21 de junho de 2014 00:16