none
dropdown com Json RRS feed

  • Pergunta

  • Uso VS2010, aspnet4, c#, jQuery

    Pessoal quando se monta um dropdown, na propriedade itens voce adiciona o text que será exibido, e o valor (que seria o código), para quando o usuário seleciona alguma linha do dropdown eu posso pegar o valor do lado servidor assim:

    string codigo = dropdown.SelectedValue;

    Estou montando um dropdown com json, está funcionando beleza, mas não consigo pegar o valor do lado servidor

    -------- [System.Web.Script.Services.ScriptService]---------

     public List<string> Pesquisar()
        {
            IList<Convenio> convenios = this.acaoConvenio.ObterTodos(new Expression<Func<Convenio, object>>[] { c => c.Descricao });
            List<string> nomes = new List<string>();
            foreach (var nome in convenios)
            {
                nomes.Add(nome.Descricao + "  " + nome.ConvenioId);
            }
            return nomes;
        }
     $.ajax({
                            type: "POST",
                            url: "../../../Buscador/BuscaConvenioLista.asmx/Pesquisar",
                            data: "{}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: ajaxSucceess
                        });
                        function ajaxSucceess(response) {
    
                            var select = $("#DropDownList1").empty();
                            select.empty().append('<option selected="selected" value="0">>> C O N V Ê N I O <<</option>');
                            $.each(response.d, function (i, data) {
                            select.append($('<option />').attr('value', data).text(data));                          
                            });
                        }

    Da forma que está exibe a descrição e o id,

    ex:

    >> C O N V Ê N I O <<

    10% 5

    20% 6

    30% 7

    ...

    mas não queria exibir o id, ele deveria ficar no value, pra eu pega=lo do lado servidor assim:

    string codigo = dropdown.SelectedValue;

    acho que deve ser na linha em negrito onde adiciono o text e o value, alguém tem alguma idéia??



    Álvaro Luiz




    • Editado Álvaro Luiz terça-feira, 11 de junho de 2013 19:45
    terça-feira, 11 de junho de 2013 19:25

Respostas

  • Opá Álvaro, ideias eu tenho muitas :D

    Mude isso no seu código:

     public List<string> Pesquisar()
        {
            IList<Convenio> convenios = this.acaoConvenio.ObterTodos(new Expression<Func<Convenio, object>>[] { c => c.Descricao });
            List<string> nomes = new List<string>();
            foreach (var nome in convenios)
            {
                nomes.Add(nome.Descricao + "|" + nome.ConvenioId);
            }
            return nomes;
        }

    E na sua pagina mude o jeito de criar o option:

     $.ajax({
                            type: "POST",
                            url: "../../../Buscador/BuscaConvenioLista.asmx/Pesquisar",
                            data: "{}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: ajaxSucceess
                        });
                        function ajaxSucceess(response) {
    
                            var select = $("#DropDownList1").empty();
                    select.empty().append('<option selected="selected" value="0">>> C O N V Ê N I O <<</option>');
                    $.each(response.d, function (i, data) {
                        var valores = data.split('|');
                        select.append($('<option />').attr('value', valores[1]).text(valores[0]));
                    });                        
                            });
                        }

    No servidor para recuperar o valor selecionado use:

    string valorSelecionado = Request.Form["DropDownList1"];




    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Álvaro Luiz quarta-feira, 12 de junho de 2013 17:53
    terça-feira, 11 de junho de 2013 19:58
  • Álvaro,

    Este solução publicada no outro post, você chegou a olhar ?

    http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/30e022fc-16f1-4d26-afb0-cc37ef6d73e9/#30e022fc-16f1-4d26-afb0-cc37ef6d73e9

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Álvaro Luiz quarta-feira, 12 de junho de 2013 17:53
    quarta-feira, 12 de junho de 2013 16:49

Todas as Respostas

  • Opá Álvaro, ideias eu tenho muitas :D

    Mude isso no seu código:

     public List<string> Pesquisar()
        {
            IList<Convenio> convenios = this.acaoConvenio.ObterTodos(new Expression<Func<Convenio, object>>[] { c => c.Descricao });
            List<string> nomes = new List<string>();
            foreach (var nome in convenios)
            {
                nomes.Add(nome.Descricao + "|" + nome.ConvenioId);
            }
            return nomes;
        }

    E na sua pagina mude o jeito de criar o option:

     $.ajax({
                            type: "POST",
                            url: "../../../Buscador/BuscaConvenioLista.asmx/Pesquisar",
                            data: "{}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: ajaxSucceess
                        });
                        function ajaxSucceess(response) {
    
                            var select = $("#DropDownList1").empty();
                    select.empty().append('<option selected="selected" value="0">>> C O N V Ê N I O <<</option>');
                    $.each(response.d, function (i, data) {
                        var valores = data.split('|');
                        select.append($('<option />').attr('value', valores[1]).text(valores[0]));
                    });                        
                            });
                        }

    No servidor para recuperar o valor selecionado use:

    string valorSelecionado = Request.Form["DropDownList1"];




    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Álvaro Luiz quarta-feira, 12 de junho de 2013 17:53
    terça-feira, 11 de junho de 2013 19:58
  • Olá vitor obrigado pela resposta. Fiz exatamente como me mandou, coloquei um botão pra pegar o valor do lado servidor mas quando clico dá o erro:

    Erro: Argumento de postback ou de retorno de chamada inválido. A validação do evento é habilitada com o uso de <pages enableEventValidation="true"/> na configuração ou <%@ Page EnableEventValidation="true" %> em uma página. Por motivos de segurança, esse recurso verifica se os argumentos para eventos de postback ou de retorno de chamada se originam no controle do servidor que originalmente os processou. Se os dados forem válidos e esperados, use o método ClientScriptManager.RegisterForEventValidation para registrar os dados de postback ou de retorno de chamada para validação.

    ----------

    sabe como resolve essa viagem rsrsrs


    Álvaro Luiz

    terça-feira, 11 de junho de 2013 21:49
  • Álvaro,

    Este solução publicada no outro post, você chegou a olhar ?

    http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/30e022fc-16f1-4d26-afb0-cc37ef6d73e9/#30e022fc-16f1-4d26-afb0-cc37ef6d73e9

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    • Marcado como Resposta Álvaro Luiz quarta-feira, 12 de junho de 2013 17:53
    quarta-feira, 12 de junho de 2013 16:49