none
UpdatePanel dentro de outro (cascateado) RRS feed

  • Pergunta

  • Bom dia,

    Tenho em minha aplicação um updatepanel na master page para todos os containers. Porém, em um dos containers, eu tenho um update dinâmico e independente do update da masterpage. O grande problema é que o update da master está fazendo atualizações junto com o timer que encontra-se dentro do updatepanel deste container em questão. Resumindo: neste cascateamento, o update filho atualiza o pai também.

    Navegando pelo fórum MSDN, deram a dica que, setando o updatemode para conditional, este problema seria solucionado, mas não ocorreu.

    O que poderei fazer neste caso? Meu objetivo é atualizar, com o timer que encontra-se dentro do update filho, atualizar somente o que está no update filho, e não o que está no update master também.

    Desde já agradeço.
    terça-feira, 13 de outubro de 2009 13:56

Respostas

  • Oi, Cayo,


    Async = vai provocar um update assíncrono

    Sync = vai ser ignorado pelo update panel


    O updatepanel tem uma propriedade chamada childrenastriggers e que encontra-se definida automaticamente como true. Significa que automaticamente o updatepanel vai interceptar todas as idas ao servidor dos objetos que estão dentro dele e gerencia-las.

    Por isso você não conseguiu inserir um postbackTrigger (sync) para um objeto dentro do updatepanel, porque o default é que todos sejam tratados como se já tivessem trigger.

    Você poderia fazer o seguinte : inverter a propriedade childrenastriggers para false e colocar um postbacktrigger para todos os objetos que você deseja que o updatepanel intercepte - menos o timer .

    Só que isso daria tanto trabalho que acho mais recomendável fazer uma masterpage separada, coisa que com os recursos de nestedmasterpage e user controls você consegue fazer sem dificuldade.

    []'s

    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  17/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel : (11) 3170-3056 (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 14 de outubro de 2009 18:12

Todas as Respostas

  • Olá Cayo,

    Para atualizar esses updatePanels, vc usa algum button certo ?

    se sim, após você setar eles para conditional, você também atribuiu o evento para o botão ?

    porque por default o button atualiza todos os updatePanels.


    Abraço!

    terça-feira, 13 de outubro de 2009 14:37
  • Para setar o evento para o botão atualizar somente 1 panel :


    updatePanel > Propriedades > Triggers > ADD e especifique o botão que vai disparar o evento.


    Espero que seja isso que esteja precisando.

    Abraços!

    terça-feira, 13 de outubro de 2009 14:52
  • Olá Luciano,

    Tentei o meu controle é um timer e não um botão. O timer possui um evento que faz um painel de notícias, eventos e artigos do portal que estou desenvolvendo, ficarem alternando de forma dinâmica. Mas adicionei o timer na trigger no updatepanel, conforme código abaixo, mas não surtiu efeito.

    <Triggers>

     

    <asp:AsyncPostBackTrigger ControlID="tmrPainel" />

     

    </Triggers>


    Caso você queira ver na íntegra o problema, pode acessar o endereço do portal (http://www.conilonbrasil.com.br/Principal.aspx). note os controles do ajax existentes neste container: TabPanel e TextBoxWatermarkExtender.

    O TabPanel está dentro do UpdatePanel, já o TextBoxWatermarkExtender não está. Mas mesmo assim ele atualiza no evento do Timer, contido dentro do UpdatePanel da TabPanel.

    Desculpe se acabei embolando, mas tentei explicar com máximo de detalhes.

    Agradeço muito a sua atenção!

    terça-feira, 13 de outubro de 2009 16:19
  • Adicione o EventName : Tick ao seu Trigger,

    fiz um teste aqui e deu certo, com todos os upPanel em conditional,

    fica assim:

     

    <Triggers>

     

    <asp:AsyncPostBackTrigger ControlID="tmrPainel" EventName="Tick" />

     

    </Triggers>

    terça-feira, 13 de outubro de 2009 16:41
  • Oi, Cayo,


    Async = vai provocar um update assíncrono

    Sync = vai ser ignorado pelo update panel


    O updatepanel tem uma propriedade chamada childrenastriggers e que encontra-se definida automaticamente como true. Significa que automaticamente o updatepanel vai interceptar todas as idas ao servidor dos objetos que estão dentro dele e gerencia-las.

    Por isso você não conseguiu inserir um postbackTrigger (sync) para um objeto dentro do updatepanel, porque o default é que todos sejam tratados como se já tivessem trigger.

    Você poderia fazer o seguinte : inverter a propriedade childrenastriggers para false e colocar um postbacktrigger para todos os objetos que você deseja que o updatepanel intercepte - menos o timer .

    Só que isso daria tanto trabalho que acho mais recomendável fazer uma masterpage separada, coisa que com os recursos de nestedmasterpage e user controls você consegue fazer sem dificuldade.

    []'s

    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  17/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel : (11) 3170-3056 (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 14 de outubro de 2009 18:12
  • Luciano,

    Muito obrigado pela atenção, mas realmente não obtive sucesso. fiz várias pesquisas com base na sua resolução e inúmeras tentativas, sem resultado positivo. Mas agradeço muito sua atenção!

    Dennes,

    Excelente esclarecimento! Vou buscar informações mais completas sobre isso.

    Inicialmente eu até pensei em fazer uma master page, praticamente igual a outra (um clone), retirando os updates para evitar as atualizações sincronizadas com o que realmente deveria atualizar. Mas pensei que isso seria uma péssima pratica de programação. Acha que não seria?

    Obrigado!

    Abs
    quarta-feira, 14 de outubro de 2009 18:37
  • Oi,

    Utilize nested master pages. Uma com o básico, sem o updatepanel, outra com o updatepanel, sendo nested (baseada) da primeira.

    Algumas páginas serão baseadas em uma, outras páginas em outra, sem que haja duplicação em ponto algum.

    Lembre-se : Se em algum ponto precisar duplicar algo, como imaginou isso é uma péssima prática e consequentemente algo está sendo utilizado errado.

    []'s

    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  17/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel : (11) 3170-3056 (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 14 de outubro de 2009 18:42