ASP .NET - Criando seu primeiro Web Forms II
Qual a diferença entre Visual Basic.NET e ASP.NET ?
Esta foi a pergunta que deixamos no ar no artigo : Criando seu primeiro Web Forms.
ASP.NET é uma linguagem que fica por trás de um Web Form. De forma geral parece-se com HTML com algumas tags especiais. E você não escreve código ASP.NET diretamente mas permite ao Web Form Designer criar o código para você. Funciona mais ou menos assim :
Mantendo o estado da página
Um dos grandes problemas enfrentados pelas páginas ASP era manter o estado dos controles e variáveis , ou seja , cada vez que sua página ASP vai ao servidor e volta , todas as informações fornecidas nos controles de interface de usuário são perdidas , pois a página é recriada toda vez que o usuário a solicita. Este problema causou muitas dores de cabeça aos desenvolvedores ASP.
Felizmente com ASP.NET temos boas notícias : Com ASP.NET o servidor pode fazer este trabalho registrando as informações sobre a posição atual de controles de página em um campo oculto na página WEB .
Este campo oculto então é transmitido de volta ao servidor em cada postback. Isto é feito de modo transparente e as informações são retidas para cada controle.
Você pode ver as informações deste campo se examinar a página HTML em um editor de texto.
Calma !!! as informações são criptografadas para evitar olhos curiosos !!!.
Abaixo um exemplo :
<input type="hidden" name=" _VIEWSTATE" value="¨%$%$*&(*%+_((*&¨%}^{HGFJUCJhgfgfdf=" />
Para que isto funcione você deve definir como True a propriedade EnableViewState do controle, e , isto vale para qualquer controle que você possa modificar com código.
Nota: O efeito perverso do _VIEWSTATE é a degradação do desempenho se sua página tiver muitos controles usando o _VIEWSTATE .
Quando usamos ASP.NET estamos pressupondo que o código é executado no lado do servidor (server-side) , mas os eventos de interface são realizados no lado do cliente (client-side).
Assim qualquer evento do lado do cliente dispara um evento no lado do servidor , com o evento gerado , a página é enviada , processada e devolvida.
Podemos resumir as etapas principais envolvidas como :
Vamos aproveitar o exemplo usado no artigo - Criando seu primeiro Web Forms - e fazer uma inclusão no código usado. Vamos supor que desejamos saber quantas vezes a rotina de conversão da página é executada. Para fazer isto eu vou incluir uma variável contador que irá ser acrescida no evento Click do botão de comando que faz a conversão , de forma que tenhamos uma maneira de contar os acessos à rotina de conversão da página. O valor será exibido em um controle Label que também será incluído na página. Será que vai funcionar ??? Vejamos como ficou o código :
Private
Sub Button1_Click(ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click Dim polegadas As Single Dim contador As Integer polegadas = Val(txtmetros.Text) / 0.0256 lblresultado.Text = polegadas & " polegadas " 'código inserido para contar os acessos a página contador = contador +1 lblacessos.text = contador.ToString() & " acessos a rotina de conversão "
End Sub |
O layout da nossa página Web Form ficou assim : (lembre-se que o nome do controle é definido pela propriedade (ID) )
Se você executar a página e clicar uma , duas , três ,... vezes no botão - Converter para Polegadas - vai perceber que o contador não sofrerá alterações , sempre irá exibir o valor igual a 1 . Porque ? Por que a página é recriada a cada solicitação e a variável também é recriada e tudo começa do 'zero' a cada solicitação. Então como resolver o problema ???
Se você pensou em armazenar a variável na memória do servidor , considere que em um ambiente com milhares de variáveis ( e isto não é difícil de ocorrer na internet) a memória do servidor iria se esgotar e o desempenho vai ser afetado. E agora ?
Para resolver este problema podemos usar o recurso , explicado acima , ele é chamado : State Bag ; e permite a uma página ASP.NET restaurar automaticamente o conteúdo dos controles usados na página.
Vejamos como fica o código usando o State Bag:
Private
Sub Button1_Click(ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click Dim polegadas As Single Dim contador As Integer polegadas = Val(txtmetros.Text) / 0.0256 lblresultado.Text = polegadas & " polegadas " contador = CType(ViewState("contador"), Integer) contador = contador +1 lblacessos.text = contador.ToString() & " acessos a rotina de conversão " ViewState("contador") = contador End Sub |
Como funciona ?
1 - contador = CType(ViewState("contador"), Integer)
Esta linha de código recupera o valor da variável contador armazenada no State Bag (ViewState("contador")).
2- ViewState("contador") = contador
Esta linha de código cria o item contador na State Bag , pois cada item na State Bag é indexado por um nome , e , se ele não existe , será criado da primeira vez.
Pronto !! ao executar a página e clicar no botão para conversão veremos exibido o número de vezes que a rotina foi acessada. Beleza ???
Mas nem tudo é um mar de rosas , embora você possa usar este recurso para o formulário Web Form atual , se o usuário navegar para outro formulário Web Form teremos que usar outro método para passar as informações entre as páginas(veremos como fazer isto em outro artigo) , ou seja , o State Bag só funciona para o formulário atual.
Além disto se você abusar deste recurso a saída HTML onde o campo oculto da State Bag é armazenado pode tornar a transmissão da página lenta.
Para terminar este artigo teórico mas fundamental para que você compreenda os conceitos básicos relacionados com ASP.NET vou falar da propriedade Page.IsPostBack
Quando a página viaja do cliente para o servidor e retorna do servidor para o cliente dizemos , ou melhor os gringos dizem , que ocorreu um round-trip (chic não é mesmo..).
Então quando ocorre um round-trip.(pronuncia-se : ráund-trip) ??
Um round-trip ocorre toda vez que a página é solicitada ou quando ocorre um POST (envio) de formulário.
Pois bem , para saber qual a primeira vez em que a página foi solicitada ou se ocorreu um POST usamos a propriedade .IsPostBack.
Page.IsPostBack retorna um valor boleano ( True ) se a origem for um POST e retorna um ( False ) se for a primeira execução da página.
Com isto em mente podemos usar o evento Load_Page no caso do exemplo anterior para obter o mesmo resultado. Veja como ficou o código:
Private
Sub
Page_Load(ByVal
sender As
System.Object,
ByVal
e As System.EventArgs)
Handles
MyBase.Load If Not Page.IsPostBack Then ViewState("contador") = 1 Else ViewState("contador") = CInt(ViewState("contador")) + 1 End If lblacessos.Text = ViewState("contador") & " acessos à rotina de conversão" End Sub |
Como funciona ?
Verificamos se a pagina foi solicitada diretamente sem um clique de botão em : If Not Page.IsPostBack , e então atribuímos o valor inicial igual a 1 ao State Bag.
Depois é só incrementar o contador , pois a cada clique o valor para Page.IsPostBack será sempre igual a True.
Executando a página e clicando algumas vezes no botão de conversão teremos:
|
Por enquanto é só isto . Em breve novos artigos sobre ASP.NET , aguarde...
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: