ASP.NET - Persistindo valores entre web forms
Embora os Web Forms tenham sido uma evolução que oferece um modelo de eventos onde o desenvolvedor pode facilmente trabalhar para construir sua aplicação Web. Nem tudo são flores.
Com ASP você podia passar valores de uma página para outra usando o método POST . Não dá para fazer a mesma coisa em ASP.NET.
É claro que existem formas de contornar a situação e neste artigo vou procurar mostrar algumas das possibilidades as quais são :
Usando variáveis de sessão:
A ideia aqui é armazenar valores para um web form(form1.aspx) em variáveis de sessão em ume acessá-las no outro web form(form2.aspx)
Você só deve ter o cuidado de não sobrecarregar a sessão com muitas variáveis senão o servidor abre o bico... Vejamos como se faz:
form1.aspx (C#) | web form |
private void Button1_Click (object sender, System.EventArgs e) { //textbox1 e textbox2 são controles do webform Session["nome"]=TextBox1.Text; Session["email"]=TextBox2.Text; Response.Redirect("form2.aspx"); } |
Ao clicar no botão de comando os valores dos controles TextBox são armazenados nas variáveis de sessão e repassadas para o formulário from2.aspx.
form2.aspx (C#) | web form |
private void Page_Load (object sender, System.EventArgs e) { TextBox1.Text=Session["nome"].ToString(); TextBox2.Text=Session["email"].ToString(); Session.Remove("nome"); Session.Remove("email"); } |
Ao ser carregado o web form form2.aspx obtém os valores das variáveis de sessão e as exibe nos TextBox ; depois remove os valores da sessão
Usando QueryString
Se você conhece ASP conhece também QueryString. Ele é muito usado para passar valores entre páginas ASP. A única desvantagem é que os valores passados serão visíveis no Navegador do usuário e você também não pode passar objetos usando QueryString. Ele é adequado para pequenos valores (o limite é uma string de 255 caracteres) que não necessitam de segurança. Para usá-lo fazemos assim :
form1.aspx (C#)
private void Button1_Click (object sender, System.EventArgs e) { string url; url="form2.aspx?nome=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); }
|
No formulário form2.aspx receba os valores usando QueryString via objeto Request:
form2.aspx (C#)
private void Page_Load (object sender, System.EventArgs e) { TextBox1.Text=Request.QueryString["nome"]; TextBox2.Text=Request.QueryString["email"]; } |
Usando Server.Transfer
A utilização do método Server.Transfer é um pouco mais complexo. Nele você expõe os valores que deseja acessar em outra página como propriedade de uma classe. Por isto você terá que definir via código as propriedades na classe. É uma maneira mais elegante de passar valores.
Devemos definir duas propriedades : Nome e Email. em form1.aspx .
Vou usar agora código VB.NET.
Public ReadOnly Property Nome() As String Get Return TextBox1.Text End Get End Property Public ReadOnly Property EMail() As String Get Return TextBox2.Text End Get End Property |
Private Sub Button1_Click(sender As Object, e As System.EventArgs) Server.Transfer("form2.aspx") End Sub 'Button1_Click |
No formulário que vai receber os valores , form2.aspx fazemos :(VB.NET)
Private Sub Page_Load(sender As Object, e As System.EventArgs) 'cria uma instância de formulário form1.aspx Dim wf1 As WebForm1 'obtem a referencia para manipular da instância atual wf1 = CType(Context.Handler, WebForm1) TextBox1.Text = wf1.Nome TextBox2.Text = wf1.EMail End Sub |
Usando a classe HttpContext :
A classe encapsula todas as informações específicas sobre uma requisição HTTP. O objeto HttpContext da requisição HTTP atual fornece acesso aos objetos intrínsicos Request , Response e Server para a requisição.
Os valores armazenados em HttpContext são validos somente durante a duração de uma requisição. Veja o código abaixo:(VB.NET)
form1.aspx (VB.NET)
Private Sub Button1_Click(sender As Object, e As System.EventArgs) Dim context As HttpContext = HttpContext.Current context.Items("Nome") = TextBox1.Text context.Items("Email") = TextBox2.Text Server.Transfer("form2.aspx") End Sub
|
em form2.aspx - recebendo os valores e exibindo nos controles. Note que tenho que converter para String.
form2.aspx (VB.NET)
Private Sub Page_Load(sender As Object, e As System.EventArgs) Dim context As HttpContext = HttpContext.Current TextBox1.Text = CStr(context.Items("Nome")) TextBox2.Text = CStr(context.Items("Email")) End Sub |
Faltou eu falar sobre ViewState ? Não ! dê uma olhada no artigo : ASP.NET - Criando seu primeiro Web Form - II.
Até mais ver ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: