Dec 07 2006
.NET - Server.Transfer X Response.Redirect
A passagem de parâmetros entre páginas é muito comum no dia-a-dia de qualquer desenvolvedor WEB. Em .NET existem basicamente três formas para fazer isso:
- QueryString: envia os parâmetros pela URL;
- Session: utiliza o conceito de sessão para armazenar os parâmetros;
- HttpContext.Current.Items: disponível somente durante o Request.
É muito comum utilizar o Response.Redirect(”url”) para enviar o usuário a uma determinada página. Esta forma de envio funciona perfeitamente com a passagem via QueryString ou Session, pois são parâmetros “permanentes”, ou seja, estão disponíveis durante e depois do Request (teoricamente).
No caso do HttpContext.Current.Items, o Response.Redirect(”url”) não deixará disponível as informações salvas na página anterior.
Exemplo:
1 <%@ Page Language="C#" AutoEventWireup="true" 2 CodeFile="Default.aspx.cs" Inherits="_Default" %> 3 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 5 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 6 7 <html xmlns="http://www.w3.org/1999/xhtml" > 8 <head runat="server"> 9 <title>Untitled Page</title> 10 </head> 11 <body> 12 <form id="form1" runat="server"> 13 <div> 14 <asp:Button ID="_btnEnviar" runat="server" Text="Enviar" 15 OnClick="_btnEnviar_Click" /></div> 16 </form> 17 </body> 18 </html>
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.UI.WebControls.WebParts; 9 using System.Web.UI.HtmlControls; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 string nome = 16 Convert.ToString(HttpContext.Current.Items["nome"]); 17 if (!String.IsNullOrEmpty(nome)) 18 { 19 Response.Write("Nome = " + nome); 20 } 21 } 22 23 protected void _btnEnviar_Click(object sender, EventArgs e) 24 { 25 HttpContext.Current.Items.Add("nome", "Marcos"); 26 Response.Redirect("Default.aspx"); 27 } 28 }
Ao clicar no botão “Enviar” é definido um item chamado “nome” com o valor “Marcos”. Foi definido com a intenção de acessá-lo no Page_Load e imprimir o seu valor. No entanto, ele não estará mais disponível ao carregar a página, pois como mencionado anteriormente, o HttpContext.Current.Items só está disponível durante o Request.
Uma forma bem rápida e prática para resolver este “problema” é utilizar o método Server.Transfer(”url”). Veja:
1 protected void _btnEnviar_Click(object sender, EventArgs e) 2 { 3 HttpContext.Current.Items.Add("nome", "Marcos"); 4 Server.Transfer("Default.aspx"); 5 }
Desta forma, ao clicar no botão “Enviar”, o resultado apresentado na Default.aspx será este:
É isso aí!
T+








