none
Atualizar valor sem refresh ASP.NET Web Forms RRS feed

  • Pergunta

  • Boa tarde pessoal...estou com uma dúvida

    Sou iniciante em desenvolvimento web, sempre programei aplicações desktop, tenho um drop down list com seus valores, a cada vez que o usuário mudar a opção eu preciso pegar o id do item selecionado ir na lista genérica carregada com os dados e retornar um valor específico da lista para a view, a parte de pegar o id do item é tranquilo, porém quero evitar o postback do form, qual a melhor forma? estava vendo com aqueles componentes Ajax, mas não está dando certo, alguém pode me ajudar? obrigado desde já...estou usando C# com ASP.NET Web Forms...

    Abraço

    segunda-feira, 24 de fevereiro de 2014 17:47

Respostas

  • Olá Diego,

    Veja o exemplo abaixo para utilizar os componentes Ajax do ASP.NET Web Forms:

    <asp:ScriptManager ID="ScriptManager" runat="server">
    </asp:ScriptManager>
    
    <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    
    <asp:Button ID="Button" runat="server" Text="Button" onclick="Button_Click" />

    Precisamos adicionar um objeto ScriptManager no topo da página e colocar o seu objeto que será atualizado dentro do ContentTemplate objeto UpdatePanel. Também precisamos informar o Trigger para indicar quando seu objeto será atualizado.

    Obs: No exemplo, estou atualizando um Label quando o Button é acionado. O Label é atualizado e não ocorre o refresh na página toda.

    Boa sorte!

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    terça-feira, 25 de fevereiro de 2014 18:10
  • Pq não cria um método WebMethod e faz essa busca usando JQuery e AJax com isso não precisa carregar sua tela nem o refresh o AJax se encarrega de buscar seus dados e atualizar e na sua tela fica tudo normal.
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    segunda-feira, 24 de fevereiro de 2014 18:46
  • Diego então vc pode fazer como o Rafael falou seta o teu dropdownlist como autopostback = true e no evento que ele mostrou vc pega o valor, mais para ficar melhor não inicializa teu dropdownlist com a primeira opção pq se não ele não entra pq o valor que o usuário quer já está na tela, então para resolver isso vc faz o seguinte  veja o exemplo abaixo :

    <asp:DropDownList ID="ddlDepartamento" TabIndex="3" runat="server" AppendDataBoundItems="True">
        <asp:ListItem Value="0">-- escolha uma opção --</asp:ListItem>
    </asp:DropDownList>

    Assim vc inicializa seu dropdownlist sempre com a opção 0 e vc testa claro se o usuário não selecionou nenhum item, desta forma vc vai garantir que o usuário sempre escolha uma opção e sempre vai entrar no textchanged do dropdownlist que é onde vc vai tratar o que vc quer. Essa é a solução.



    Junior

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    segunda-feira, 24 de fevereiro de 2014 18:21

Todas as Respostas

  • Diego vc só pega o valor do dropdownlist uma vez no load da página e vc coloca aqui

    if (!page.IsPostback)
    {
       aqui vc pega o id do dropdownlist;
    }
    Toda página é marcada no servidor qdo ela é um load e qdo é um postback ou seja a página já foi carregada uma vez e está sendo reenviada ao servidor, pois todo evento é executado no servidor.


    Junior

    segunda-feira, 24 de fevereiro de 2014 17:56
  • Diego, vc consegue pegar o valor do item selecionado a partir desse evento.

    Quando ele trocar os itens do combo ele vai acionar o evento abaixo.

    protected void ddlx_TextChanged(object sender, EventArgs e)         {                   }

    como voce disse que ja sabia pegar o valor do id não coloquei rs

    Espero ter ajudado

    segunda-feira, 24 de fevereiro de 2014 18:02
  • Então Junior, na verdade seria assim... 

    no load eu carrego o dropdownlist...beleza, ai os dados estão lá...a cada vez que  usuário seleciona um item eu preciso fazer um calculo na tela num label qualquer, porém para fazer esse calculo preciso pegar um valor no servidor conforme o item escolhido...exemplo, imagina um dropdownlist Pessoa lá tem os nomes...quando o usuário escolhe um nome de pessoa na tela, eu pego o id da pessoa (pelo dropdownlist mesmo) e com esse id eu faço o where nos dados para trazer a idade da pessoa...o problema é ir até o servidor para trazer a idade sem ter que atualizar a tela toda...

    o problema é ir até o servidor sem dar refresh na página toda, queria apenas atualizar parte da tela

    segunda-feira, 24 de fevereiro de 2014 18:05
  • Diego então vc pode fazer como o Rafael falou seta o teu dropdownlist como autopostback = true e no evento que ele mostrou vc pega o valor, mais para ficar melhor não inicializa teu dropdownlist com a primeira opção pq se não ele não entra pq o valor que o usuário quer já está na tela, então para resolver isso vc faz o seguinte  veja o exemplo abaixo :

    <asp:DropDownList ID="ddlDepartamento" TabIndex="3" runat="server" AppendDataBoundItems="True">
        <asp:ListItem Value="0">-- escolha uma opção --</asp:ListItem>
    </asp:DropDownList>

    Assim vc inicializa seu dropdownlist sempre com a opção 0 e vc testa claro se o usuário não selecionou nenhum item, desta forma vc vai garantir que o usuário sempre escolha uma opção e sempre vai entrar no textchanged do dropdownlist que é onde vc vai tratar o que vc quer. Essa é a solução.



    Junior

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    segunda-feira, 24 de fevereiro de 2014 18:21
  • Pq não cria um método WebMethod e faz essa busca usando JQuery e AJax com isso não precisa carregar sua tela nem o refresh o AJax se encarrega de buscar seus dados e atualizar e na sua tela fica tudo normal.
    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    segunda-feira, 24 de fevereiro de 2014 18:46
  • Olá Diego,

    Veja o exemplo abaixo para utilizar os componentes Ajax do ASP.NET Web Forms:

    <asp:ScriptManager ID="ScriptManager" runat="server">
    </asp:ScriptManager>
    
    <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    
    <asp:Button ID="Button" runat="server" Text="Button" onclick="Button_Click" />

    Precisamos adicionar um objeto ScriptManager no topo da página e colocar o seu objeto que será atualizado dentro do ContentTemplate objeto UpdatePanel. Também precisamos informar o Trigger para indicar quando seu objeto será atualizado.

    Obs: No exemplo, estou atualizando um Label quando o Button é acionado. O Label é atualizado e não ocorre o refresh na página toda.

    Boa sorte!

    • Marcado como Resposta Giovani Cr terça-feira, 4 de março de 2014 15:41
    terça-feira, 25 de fevereiro de 2014 18:10