/P>

capa_NET37_G.gif

Clique aqui para ler todos os artigos desta edição

Recuperando informações sobre o browser usando controles ASP.NET

Este artigo discute

Este artigo usa as seguintes tecnologias

·       Criação de controles ASP.NET;

·       Trabalhando com postbacks em controles ASP.NET;

·      Interação entre código JavaScript e controles ASP.NET.

Visual Basic .NET, ASP.NET 2.0 e JavaScript

 

 

 

Freqüentemente ao criar uma página Web, precisamos de informações sobre o cliente. Às vezes precisamos saber se o navegador suporta cookies, JavaScript ou em quais línguas prefere receber a página para implementar localização e globalização. Essas informações podem ser facilmente obtidas com o .NET Framework e basicamente são o resultado entre o que o navegador envia ao servidor em seus headers HTTP e o que o .NET Framework já sabe sobre o navegador.

Dessa forma, para obter a informação se o navegador suporta cookies, tudo que temos a fazer é chamar Request.Cookies. Mas o que fazer quando as informações não são tão facilmente obtidas? Como obter a versão exata do navegador, até a última casa decimal? Como obter a resolução da tela do usuário? Essas informações estão disponíveis de maneira mais ou menos fácil, através de funções JavaScript.

Por exemplo: para obter a largura da tela em pixels, tudo que necessitamos fazer é chamar window.screen.width no cliente. Como podemos fazer para trabalhar essa informação de maneira estruturada, com um Web Control e Orientação a Objeto?  

O objetivo deste artigo é responder essas perguntas, enquanto damos uma boa olhada no modelo de controles do ASP.NET.

 

A raiz do problema: como enviar os dados do navegador ao servidor

Toda a comunicação Web acontece entre chamadas GET e POST. A única maneira de passar dados a uma página com GET é através da URL, com Query Strings. Já no POST podemos utilizar o corpo do mesmo, que permite uma gama bem maior de possibilidades. É através do POST que normalmente fazemos toda a comunicação das ações realizadas pelo usuário ao servidor e é assim que vamos enviar os dados recuperados com JavaScript no cliente para o servidor.

O maior problema é que para um POST existir, o cliente primeiro precisa receber as informações de alguma página (através de um GET ou outro POST) e que algo indique ao navegador, a necessidade de postar novamente para o servidor, que retornará uma nova página ao cliente. Sendo assim não há como evitar uma viagem a mais entre servidor e cliente quando for necessário obter algum dado que está no cliente.

Dessa forma, o ideal é colocar os dados requisitados em variáveis de sessão ou cookies temporários, a fim de evitar o processo de recuperação a cada solicitação, o que levaria a uma viagem a mais entre servidor e cliente a cada requisição.

O segredo está em enviar no código da página uma função JavaScript que faça a recuperação dos valores e então postar os mesmos através do modelo de postback do ASP.NET. Toda página ASP.NET que contenha código que não seja capaz de ser postado através de um botão Submit, terá a função doPostBack. Essa função tem a responsabilidade de enviar o formulário ao servidor com um POST (uma chamada ao método Submit) avisando à infra-estrutura do ASP.NET que controle foi responsável pela postagem, assim como eventuais argumentos.

Para isso, ela encapsula em campos hidden esses valores, normalmente identificados como EVENTTARGET e EVENTARGUMENT. Não devemos, no entanto, referenciar essa função diretamente no código JavaScript gerado no servidor. O nome da função e os seus parâmetros são criados automaticamente com uma chamada à GetPostBackEventReference do ASP.NET, garantindo que a função será colocada na página a ser renderizada.

O ideal é que toda essa funcionalidade fique encapsulada em um controle ASP.NET, simplificando o código, permitindo reutilização, e abstraindo os valores recuperados em propriedades de objeto.

 

Criando o controle ASP.NET

Vamos criar o projeto do controle e a aplicação ASP.NET. Abra o Visual Studio 2005 e clique em Create Web Site e digite o nome “InfoCliente”. Para criar o projeto do controle, clique com o botão direito na solução e escolha Add>New Project.

Controles ASP.NET geram DLLs e podem ser criados normalmente no item Class Library, mas existe um mais apropriado e que utilizaremos neste artigo. Para isso, clique em Visual Basic>Windows e selecione Web Control Library. Dê o nome de “InfoCliente.Controles” ao projeto e clique em OK (Figura 1).

 

image004.jpg

Figura 1. Criando o projeto no Visual Studio 2005

 

Controles criados com esse template ou através de um projeto de Class Library são diferentes dos User Controls que são criados diretamente em aplicações Web e não possuem interface gráfica ou ajuda do designer do Visual Studio 2005. Todo o código enviado ao cliente deve ser programado manualmente.

O Web Control Library traz por padrão um exemplo de controle chamado WebCustomControl1, no arquivo WebCustomControl1.vb. Podemos excluir esse arquivo. Para criar o controle que trabalharemos clique com o botão direito sob o projeto de controles, selecione Add New Item e então Web Custom Control.

Dê o nome “InformacoesBasicas” ao controle e clique em OK. Isso gerará o arquivo InformacoesBasicas.vb, que devido ao template de Web Custom Control, possui código que para esse artigo é desnecessário.

Remova todos os métodos e propriedades colocados como exemplos e também o atributo DefaultProperty (cuidado para não remover a declaração da classe). É uma boa idéia depois estudar os atributos utilizados tanto na declaração da classe quanto os utilizados nas declarações de propriedades de exemplo, a fim de entender melhor o funcionamento de Web Controls.

Vamos iniciar o desenvolvimento, endereçando o evento Init do controle. Nesse evento faremos uma simples chamada a Page.ClientScript.GetPostBackEventReference, que garantirá o controle ter na página o método doPostBack. Para criar o endereçador do evento Init clique sobre o ComboBox do topo à esquerda e selecione InformacoesBasicas Events. No Combo a direita selecione o evento Init. O código deve ficar igual a esse:

 

Private Sub InformacoesBasicas_Init( _

  ByVal sender As Object, ByVal e As System.EventArgs) _

  Handles Me.Init

    Page.ClientScript.GetPostBackEventReference(Me, "")

End Sub

 

Vamos criar então as propriedades que exporemos para a página Web, que irá recuperá-las para tratar conforme achar necessário. Trataremos as propriedades descritas na Tabela 1.

 

Nome

Tipo

Descrição

Tamanho

System.Drawing.Size

...
Quer ler esse conteúdo completo? Tenha acesso completo