Usuário com melhor resposta
dropdown com Json

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
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
-
Á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-cc37ef6d73e9Vitor 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
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
-
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
-
Á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-cc37ef6d73e9Vitor 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