Whats new? | Login | Parceiros
Cadastre-se | Atendimento | RSS
+ .net:
artigos   |   vídeos   |    cursos   |    mais
Este post foi publicado diretamente pelo autor e não foi revisado pela DevMedia.

ASP.NET AJAX: Carregando abas sobre demanda

Aprenda como carregar abas sobre demanda.

FELIPE JOSÉ FONSECA PIMENTEL
Aluno de graduação do 7º período do curso de ciências da computação da UNICAP (Universidade Católica de Pernambuco). Atua na área de TI a um ano e meio. E ocupa o cargo de Engenheiro de Software de uma grande empresa de Pernambuco.


Ver space do autor


Estatísticas:
Visualizações:
3758
Favoritado:
 4 vez(es)
Conteúdo:
Didática:
Utilidade:
1 1
votos: 2

Serviços:



Se tivermos em uma página uma quantidade muito grande de abas, o HTML final vai ser igual a soma do HTML de todas as abas, certo? Sabendo disso, lhes pergunto: Já pensou como é pesado trazer para o usuário uma quantidade enorme de HTML (todas as abas) se o que ele quer inicialmente é apenas manipular o conteúdo de uma ou outra aba, mas não todas, ou seja, trazemos uma página muito pesada desnecessariamente.

Seria bem melhor se inicialmente carregassemos apenas a primeira aba, e caso fosse necessário, as outras abas seriam carregadas sobre demanda. Concordam?

Pois é!!! A intenção deste post é justamente isto. Mostrar como carregar abas sobre demanda em ASP.NET AJAX.

 

1. Como funciona?

A idéia é bastante simples.

  1. Colocaremos um Update Panel dentro de cada aba.
  2. Todos os controles que estam dentro de abas que não são a ativa, serão setados para VISIBLE = FALSE (Isso é necessário para não retornamos para o lado cliente todos os controles de todas as abas).
  3. A medida que o usuário muda de aba, será disparado um evento que será manipulado em javascript
  4. Este por sua vez irá disparar um UpdatePanel que irá atualizar os controles internos para VISIBLE = TRUE.

 

2. O Código HTML
   1: <cc1:TabContainer ID="tbTesteBlog" runat="server" ActiveTabIndex="0" OnClientActiveTabChanged="mudancaAba">
   2:             <cc1:TabPanel ID="TabPanel1" runat="server" HeaderText="TabPanel1">
   3:                 <HeaderTemplate>
   4:                     Aba 1
   5:                 HeaderTemplate>
   6:                 <ContentTemplate>
   7:                     Aba 1
   8:                 ContentTemplate>
   9:             cc1:TabPanel>
  10:             <cc1:TabPanel ID="TabPanel2" runat="server" HeaderText="TabPanel2">
  11:                 <HeaderTemplate>
  12:                     Aba 2
  13:                 HeaderTemplate>
  14:                 <ContentTemplate>
  15:                     <asp:UpdatePanel ID="upAba2" runat="server">
  16:                         <ContentTemplate>
  17:                             <asp:Button ID="btnDisparaAba2" runat="server" Style="display: none" OnClick="btnDisparaAba2_Click" />
  18:                             <asp:Panel ID="pnlAba2" runat="server" Visible="false">
  19:                                 Aba 2
  20:                             asp:Panel>
  21:                         ContentTemplate>
  22:                     asp:UpdatePanel>
  23:                 ContentTemplate>
  24:             cc1:TabPanel>
  25:             <cc1:TabPanel ID="TabPanel3" runat="server" HeaderText="TabPanel3">
  26:                 <HeaderTemplate>
  27:                     Aba 3
  28:                 HeaderTemplate>
  29:                 <ContentTemplate>
  30:                     <asp:UpdatePanel ID="upAba3" runat="server">
  31:                         <ContentTemplate>
  32:                             <asp:Button ID="btnDisparaAba3" runat="server" Style="display: none" OnClick="btnDisparaAba3_Click" />
  33:                             <asp:Panel ID="pnlAba3" runat="server" Visible="false">
  34:                                 Aba 3
  35:                             asp:Panel>
  36:                         ContentTemplate>
  37:                     asp:UpdatePanel>
  38:                 ContentTemplate>
  39:             cc1:TabPanel>
  40:             <cc1:TabPanel ID="TabPanel4" runat="server" HeaderText="TabPanel4">
  41:                 <HeaderTemplate>
  42:                     Aba 4
  43:                 HeaderTemplate>
  44:                 <ContentTemplate>
  45:                     <asp:UpdatePanel ID="upAba4" runat="server">
  46:                         <ContentTemplate>
  47:                             <asp:Button ID="btnDisparaAba4" runat="server" Style="display: none" OnClick="btnDisparaAba4_Click" />
  48:                             <asp:Panel ID="pnlAba4" runat="server" Visible="false">
  49:                                 Aba 4
  50:                             asp:Panel>
  51:                         ContentTemplate>
  52:                     asp:UpdatePanel>
  53:                 ContentTemplate>
  54:             cc1:TabPanel>
  55:         cc1:TabContainer>

Explicações:

  1. Temos botões invisíveis (style=”display:none”) dentro de cada Update Panel, porque iremos manipular seus eventos de click para alterar a visibilidade do conteúdo para true.
  2. O evento do TabContainer que manipula a troca de abas é: OnClientActiveTabChanged

 

3. Código JavaScript
   1: function mudancaAba() {
   2:            var index = $find("<%= tbTesteBlog.ClientID  %>").get_activeTabIndex();
   3:            if (index == 1 && !$get("<%= pnlAba2.ClientID %>")) {
   4:                $get("<%= btnDisparaAba2.ClientID %>").click();
   5:            } else if (index == 2 && !$get("<%= pnlAba3.ClientID %>")) {
   6:                $get("<%= btnDisparaAba3.ClientID %>").click();
   7:            } else if (index == 3 && !$get("<%= pnlAba4.ClientID %>")) {
   8:                $get("<%= btnDisparaAba4.ClientID %>").click();
   9:            }
  10:        }

Explicações:

  1. Na linha dois, eu pego o índice da aba selecionada
  2. Em seguida, saio comparado se a aba selecionada é a primeira ou a segunda ou a terceira…
  3. Verifico no “if”, também, se o panel já foi carregado. Se foi, não preciso carregar novamente.
  4. Caso contrario, forço o evento de click do respectivo botão.

3. O Código C#
Para finalizar, devemos manipular os eventos que serão disparados por nossos controles servidor ("btnDisparaAba3_Click", "btnDisparaAba2_Click", etc).
Nesses eventos iremos setar nossos Panels para "visible = true". Apenas Isto!!! Simples não é?

public void btnDisparaAba3_Click(object sender, EventArgs e){
     pnlAba3.Visible = true;
}


Para baixar o código fonte, acessar:

http://cid-2d6d3503299ba131.skydrive.live.com/self.aspx/Artigos/AbasPorDemanda.rar





Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar ;-)



 
 

[Este post ainda não foi associado a uma sequência]


[Fechar]
Este post está disponível somente para quem possui Créditos DevMedia. (Ele não está associado a nenhuma publicação DevMedia).


  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
DevMedia Group   www.devmedia.com.br   |   www.javafree.org   |   www.mrbool.com
2010 - Todos os Direitos Reservados a DevMedia Group - (21) 3382-5038