Whats new? | Login
Cadastre-se | Atendimento | RSS
 
Live chat by Netwatts
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos
Você está em: / canal .net [artigos]
   + .net:   artigos   |   vídeos   |    cursos   |    mais
 
 
Outras seções:
Home 
Entenda o site 
Revistas 
Canais 
Cursos 
Palestras 
Suporte 
Fórum 
Oportunidades 
 Todos os links 

 
  Ir para o Canal .net  
+Canais:
Canal Delphi 
Canal Java 
Canal .net 
Canal Banco de dados 
Canal Mobile 
Canal Ruby on Rails 
Canal PHP 
Canal ASP 
Canal WebDesign 
Canal Engenharia de Software 
Canal Linux 
Canal Scripting 
Canal Outros 
  Todo conteúdo DevMedia 

 
  ver cursos de .net  
+Cursos:
Cursos de Java 
Cursos de .net 
Cursos de Banco de dados 
Cursos de Delphi 
Cursos de Engenharia de Software 
Cursos de Ruby on Rails 
Cursos de ASP 
Cursos de WebDesign 
Cursos de PHP 
Cursos de PalmOS 
Cursos de Linux 
Cursos de Scripting 
  Formações completas 
  Todos os cursos 

 
Canal de conteúdo .net
Revista .net Magazine
Suporte .net
Formacoes completas .net
Palestras de .net
E-books de .net
Downloads de .net
 

+Revistas:
ClubeDelphi 
.net Magazine 
Java Magazine 
webMobile Magazine 
SQL Magazine 
Engenharia de Software Magazine 
  Edições anteriores impressas 
  Todas as revistas 


Este post foi publicado diretamente pelo autor e não foi revisado pela DevMedia.
[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$ 0,00 (assinante) ou R$ 0,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$ 0,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


ASP.NET AJAX: Carregando abas sobre demanda

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





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 deste post:
Visualizações:  2894
Favoritado:  4 vez(es)
 
Conteúdo:
Didática:
Utilidade:
1 1
Feedbacks: 2

  Central de Serviços:
Inclua seu próprio artigo! (ajuda)
Participe! Inclua um comentário
Adicionar este post a Favoritos
Marcar este post como lido/assistido
Inclua uma anotação pessoal (ajuda)
RSS Feeds
Versão para impressão



Participe! Inclua um comentário
[Fechar]

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


[Fechar]

Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2009 - Todos os Direitos Reservados a DevMedia Group