Вы находитесь на странице: 1из 4

Persistindo valores entre Web Forms

Pgina 1 de 4

ASP.NET - Persistindo valores entre web forms


Embora os Web Forms tenham sido uma evoluo que oferece um modelo de eventos onde o desenvolvedor pode facilmente trabalhar para construir sua aplicao Web. Nem tudo so flores. Com ASP voc podia passar valores de uma pgina para outra usando o mtodo POST . No d para fazer a mesma coisa em ASP.NET. claro que existem formas de contornar a situao e neste artigo vou procurar mostrar algumas das possibilidades as quais so :

Utilizao das variveis de sesso (session) Utilizando o velho e bom QueryString Usando o mtodo Server.Transfer Usando a classe HttpContext

Usando variveis de sesso:


A idia aqui armazenar valores para um web form(form1.aspx) em variveis de sesso em ume acess-las no outro web form(form2.aspx) Voc s deve ter o cuidado de no sobrecarregar a sesso com muitas variveis seno o servidor abre o bico... Vejamos como se faz:

Voc cria um web form com controles Fornece algum boto ou link para submeter o seu formulrio No evento Click do boto inclua uma varivel de sesso de defina cada uma com os valores dos
controles que deseja passar

Usando o mtodo Response.Redirect envie os valores do formulrio form1.aspx para o outro


formulrio form2.aspx form1.aspx (C#) private void Button1_Click (object sender, System.EventArgs e) { //textbox1 e textbox2 so controles do webform Session["nome"]=TextBox1.Text; Session["email"]=TextBox2.Text; Response.Redirect("form2.aspx"); }

web form

Ao clicar no boto de comando os valores dos controles TextBox so armazenados nas variveis de sesso e repassadas para o formulrio from2.aspx.

web form form2.aspx (C#) 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"); }

http://www.macoratti.net/aspn_pvw.htm

11/11/2013

Persistindo valores entre Web Forms

Pgina 2 de 4

Ao ser carregado o web form form2.aspx obtm os valores das variveis de sesso e as exibe nos TextBox ; depois remove os valores da sesso

Usando QueryString
Se voc conhece ASP conhece tambm QueryString. Ele muito usado para passar valores entre pginas ASP. A nica desvantagem que os valores passados sero visveis no Navegador do usurio e voc tambm no pode passar objetos usando QueryString. Ele adequado para pequenos valores (o limite uma string de 255 caracteres) que no necessitam de segurana. Para us-lo fazemos assim :

Voc cria um web form com controles Fornece algum boto ou link para submeter o seu formulrio No evento Click do boto crie uma string que contenha a url do formulrio para o qual deseja
passar os valores e crie as variveis com os valores recebidos dos controles de form1.aspx

Usando o mtodo Response.Redirect envie os valores do formulrio form1.aspx para o outro


formulrio form2.aspx

Envie os valores via Response.Redirect para o formulrio form2.aspx


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 formulrio 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 utilizao do mtodo Server.Transfer um pouco mais complexo. Nele voc expe os valores que deseja acessar em outra pgina como propriedade de uma classe. Por isto voc ter que definir via cdigo as propriedades na classe. uma maneira mais elegante de passar valores.

http://www.macoratti.net/aspn_pvw.htm

11/11/2013

Persistindo valores entre Web Forms

Pgina 3 de 4

Devemos definir duas propriedades : Nome e Email. em form1.aspx .

Vou usar agora cdigo 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 formulrio que vai receber os valores , form2.aspx fazemos :(VB.NET) Private Sub Page_Load(sender As Object, e As System.EventArgs) 'cria uma instncia de formulrio form1.aspx Dim wf1 As WebForm1 'obtem a referencia para manipular da instncia 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 informaes especficas sobre uma requisio HTTP. O objeto HttpContext da requisio HTTP atual fornece acesso aos objetos intrnsicos Request , Response e Server para a requisio. Os valores armazenados em HttpContext so validos somente durante a durao de uma requisio. Veja o cdigo 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)

http://www.macoratti.net/aspn_pvw.htm

11/11/2013

Persistindo valores entre Web Forms

Pgina 4 de 4

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 ? No ! d uma olhada no artigo : ASP.NET - Criando seu primeiro Web Form - II. At mais ver ...

Jos Carlos Macoratti

http://www.macoratti.net/aspn_pvw.htm

11/11/2013