none
Problema ao popular uma cascading dropdownlist via JQuery RRS feed

  • Pergunta

  • e ai galera susse? =)

    então o problema da vez é o seguinte
    tenho duas ddl quando o valor de uma muda ela chama o seguinte código JQuery

    $(document).ready(function() {
    	    $("#Empresas").change(function() {
    	      idEmp = $("#Empresas option:selected").val();
    	      var url = "/Home/Autenticar/" + idEmp;
    
    	      $.getJSON(url, function(data) {
    
    	        $("#Vendedores").empty();
    	        data.each(function() {
    	          $("#Vendedores").append("<option value=" + this.id_vendedor + ">" + this.nome_vendedor + "</option>")
    	        });
    	      }); 
    	    });
    	  });
    
    em teoria ele iria para o seguinte controller

    public ActionResult Autenticar(int idEmp)
        {
          List<vendedores> vend = DAOFactory.getInstance().getVendedorDAO().listaVendedorByCodEmp(idEmp);
    
          return Json(vend);
        }
    

    se eu trocar o function(data) do callback por um alert o alert funciona
    e se eu deixar o select list estático ele popula, mas a partir dessa lista não funciona =(
    o pior é que nem da erro pra dizer o que está dando de errado, já tentei colocar o debugger; dentro da função não funcionou só funciona fora dela, assim como tentei colocar um alert dentro da função e não funcionou também =(

     

    se alguém puder me ajudar Obrigado preciso muito =) 

    quinta-feira, 7 de outubro de 2010 13:14

Todas as Respostas

  • Tenta mudar o retorno da sua Action:

    public JsonResult Autenticar(int idEmp)
    
    quinta-feira, 7 de outubro de 2010 16:51
    Moderador
  • sem sucesso =(

    eu criei um action que retorna uma string com as  options e pego usando $.get só que o código ficou com quase o dobro do tamanho :S

    quinta-feira, 7 de outubro de 2010 17:08
  • Oi Paolo,

    Na chamada:

    return
     Json(vend); 
    

     

    Aadiciona o segundo parametro passando:

    JsonRequestBehavior.AllowGet 
    

     

    E no javascript a parte onde tem:

     data.each(function
    (){...

     

    Muda para

    $(data).each(function
    (){...
    

     

    Com essas alterações deve funcionar.

     

    abraço


    @WaldyrFelix - MCP | MCTS
    sexta-feira, 15 de outubro de 2010 04:45
  • Ao inves de usar:
    $("#Vendedores").append("<option value=" + this.id_vendedor + ">" + this.nome_vendedor + "</option>")

    E

    public ActionResult Autenticar(int idEmp)
        {
          List<vendedores> vend = DAOFactory.getInstance().getVendedorDAO().listaVendedorByCodEmp(idEmp);

          return Json(vend);
        }

    Troque o ActionResult para JsonResult como disseram

    e crie uma nova variavel anonima, para esconder suas propriedades como ela são, mais ou menos assim

    public ActionResult Autenticar(int idEmp)
    {
      List<vendedores> vend = DAOFactory.getInstance().getVendedorDAO().listaVendedorByCodEmp(idEmp).Select(x =>new { id= x.id_vendedor,nome = x.nome_vendendor});
    
      return Json(vend,JsonRequestBehavior.AllowGet );
    }
    

    E no html use:

    $("#Vendedores").append(string.Format("<option value='{0}'>{1}</option>",this.id,this.nome )


    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.spaces.live.com/

    quarta-feira, 20 de outubro de 2010 14:32