none
[Resolvido] Inserir valor do banco na tag select RRS feed

  • Pergunta

  • Olá,

    Estou iniciando em C# e tenho que fazer algumas mudanças em um WebForm (estou utilizando SQL Client): Eu tenho uma tag select que lista os estados e uma outra com suas cidades através de Jquery.

    Este é o fluxo:

    A pessoa preenche o formulário e eu gravo no banco. Na próxima vez que ela acessa o website, ela é redirecionada para uma página onde há apenas um textbox pra preencherem seu cpf. Se este cpf existir no banco, eu a redireciono para a página do formulário populando-o com os valores resgatados do banco. 

    Tudo isto está feito, mas estou tendo problemas para colocar o valor do banco na tag select. Se eu coloco runat="server" nela, quando a pessoa clica nesse select, ele não carrega mais a lista de estados.

    No code behind, estou resgatando a opção selecionada assim:

    string uf = Request.Form["ddlUF"]; 
    

    Na página .aspx:

    < select id="ddlUF" name="ddlUF" style="width: 60px">< / select>
    

    Sugestões para lidar com isso? (Se puderem colocar o código inteiro, ficaria muito agradecida, pois ainda estou iniciando em C#)

    ==>Funções Jquery:

    <script type="text/javascript" src="<%= Page.ResolveClientUrl("~") %>Scripts/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="<%= Page.ResolveClientUrl("~") %>Scripts/apoio.js"></script>

     <script type="text/javascript">

    $(document).ready(function () { var listItems = ""; for (var i = 0; i < estados.length; i++) { listItems += "<option value='" + estados[i] + "'>" + estados[i] + "</option>"; } $("#ddlUF").html(listItems); }); $(function () { $("#ddlUF").change(function () { var uf = $(this).val(); var listItems = ""; for (var i = 0; i < estados_municipios[uf].length; i++) { listItems += "<option value='" + estados_municipios[uf][i] + "'>" + estados_municipios[uf][i] + "</option>"; } $("#ddlMunicipio").html(listItems); }); }); function uf_Validate(source, args) { var uf = $("#ddlUF").val(); args.IsValid = ((uf) && uf.length == 2); }


    </script>



    • Editado qazaq_ sábado, 7 de setembro de 2013 02:22
    sábado, 24 de agosto de 2013 17:37

Respostas

  • Meu formulário tem uma masterPage, e eu descobrí que quando o código se encontra dentro de um ContentPlaceHolder e você uma runat="server", o nome do controle muda e por isso o javascript não o encontra. Resolví o assunto fazendo duas tabelas, uma para cidade e outra pra estado, e colocando na minha página .aspx uma dropDownList comum. 
    sábado, 7 de setembro de 2013 02:20

Todas as Respostas

  • Você pode usar o controle DropDownList.
    sábado, 24 de agosto de 2013 18:13
  • O AutoPostBack desse dropdownlist está em true? Se não, por favor, altere a propriedade AutoPostBack para true e teste.
    domingo, 25 de agosto de 2013 14:09
  • Olá qazaq_, tudo certo brother, espero que sim.

    Segue sua solução:

     

    //Este é o metodo que carrega uma lista do banco de dados, coloca na posição

    //zero da lista a informação "Selecione:", e depois disso carrega do banco

    //os outros registros para completar sua lista.

     private void CarregarSexo(Int32 sexo_)
            {
                var listaSexo = new List<TB_SEXO>();

                using (var conexao = new SISCONTATOSEntities())
                {
                    listaSexo = conexao.TB_SEXO.ToList();
                    listaSexo.Insert(0, new TB_SEXO{ID_SEXO = 0, DS_SEXO = "Selecione: "});
                }

                //Depois de configurar os sexos na memoria
                //Vamos descer pra tela atraves de um ViewBag
                //Passamos 4 parametros pra dentro da classe SELECT LIST
                //1 - Passamos a coleção de registros que veio da TB
                //2 - Passamos o campo que é CHAVE (ID, VALUE)
                //3 - Passamos o campo que é texto (DESCRIÇÃO)
                //Vai vir selecionada, ele seleciona de acordo com
                //O Value, de acordo com o campo que é chave(ID_SEXO)
                ViewBag.Sexo = new SelectList(listaSexo, "ID_SEXO", "DS_SEXO", sexo_);
            }

    Na sua View (Tela, Pagina HTML, aspx, asp e etc...) deve ficar assim:

    // @Html.DropDownList("selectSexo", ViewBag.Sexo as SelectList, new {@class = "Lista"})

    // O trecho de código acima é uma html helper, neste caso é uma lista, ou a tag select <div> <label for="selectSexo">Sexo:</label><br /> @*Criamos uma lista de sexos carregando a partir do viewbag como o viewbag trabalha com informações do tipo DYNAMIC, fomos obrigados a colocar a tipagem*@ @Html.DropDownList("selectSexo", ViewBag.Sexo as SelectList, new {@class = "Lista"}) </div>

    A unica diferença é que estou usando a Engine Razor, por isso o "@" na frente do codigo, no seu caso"<%%> "

    Fora isso é tudo Visual C#.

    Se te ajudei responda, se não ajudei pergunte novamente, estamos aqui para ajudar.

    Participem do Maior e Melhor grupo de .Net do Brasil

    Forum Grupo NetCoders

    Facebook NetCoders

    LGroup Desenvolvimento e Treinamento

    Valeu.

    Anderson Anzileiro



    domingo, 25 de agosto de 2013 22:17
  • Mas por eu estar começando com C#, eu não sei como usar essas funções Jquery com dropDownList.
    segunda-feira, 26 de agosto de 2013 23:46
  • Não é uma dropdownlist, é uma tag select do html. Sendo assim, não tem AutoPostBack. Talvez se desse para inserir o valor default pelo code behind por asp clássico..  ... Mas eu não sei como--> Note que a pessoa que resgatou o valor escolhido, resgatou pelo código
    string uf = Request.Form["ddlUF"]; 

    • Editado qazaq_ terça-feira, 27 de agosto de 2013 00:04
    segunda-feira, 26 de agosto de 2013 23:47
  • Desculpe minha ignorância, mas você tá usando MVC razor com entity e eu estou usando uma tag select do html com Sql Client, o que são bem diferentes. Não sei o suficiente pra converter os padrões que você está usando com os que eu estou. Poderia postar como ficaria na tag select de modo que não impacte nas funções Jquery?

    Obrigada




    • Editado qazaq_ terça-feira, 27 de agosto de 2013 00:09
    segunda-feira, 26 de agosto de 2013 23:55
  • Meu formulário tem uma masterPage, e eu descobrí que quando o código se encontra dentro de um ContentPlaceHolder e você uma runat="server", o nome do controle muda e por isso o javascript não o encontra. Resolví o assunto fazendo duas tabelas, uma para cidade e outra pra estado, e colocando na minha página .aspx uma dropDownList comum. 
    sábado, 7 de setembro de 2013 02:20