Cross Page Posting é um recurso frequentemente usado quando é necessário recolher dados em uma página e processá-los em outra. Para acessar os dados da página anterior é necessário usar a propriedade PreviousPage do objeto Page. Para acessar os controles da página anterior devemos utilizar o método FindControl no NamingContainer do controle que estamos tentando localizar.
No exemplo abaixo temos uma página inicial chamada FirstPage.aspx, esta contém um panel, 2 labels com a descrição dos campos a serem preenchidos, 2 TextBoxs para informar o Nome e o CPF do usuário e 1 botão de enviar que irá chamar a próxima página (SecondPage.aspx). No evento click do botão devemos fazer a chamada à próxima página onde iremos recolher os dados inseridos aqui. Abaixo está o código da página FirstPage.aspx:
protected void btnEnviar_Click(object sender, EventArgs e)
{
Server.Transfer("/SecondPage.aspx");
}
Já no load da página posterior, SecondPage.aspx, fazemos a leitura dos dados conforme explicado anteriormente. Nessa página temos também um panel chamado pnlDadosUsuario onde temos quatro labels, duas com a descrição dos campos Nome e CPF do usuário e duas onde os dados serão exibidos. Abaixo está o código que faz a leitura dos dados:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
lblNomeUsuario.Text = ((TextBox)PreviousPage.FindControl("txtNomeUsuario")).Text;
lblCPFUsuario.Text = ((TextBox)PreviousPage.FindControl("txtCPF")).Text;
}
else
{
pnlDadosUsuario.Visible = false;
Response.Write("Não foi possível recuperar os dados do usuário!");
}
}
Observe que o endereço da página no browser não foi alterado, o que é perfeitamente normal quando usamos o método Server.Transfer().
Uma outra forma de acessar dados da página anterior é através de propriedades públicas criadas na página que podem ser acessadas através da propriedade PreviousPage do objeto Page, no entanto, para acessar os dados dessa forma é necessário informar na diretiva da página destino qual a página anterior onde os dados serão recuperados. No exemplo abaixo, aproveitamos a mesma página criada anteriormente e criamos duas propriedades: NomeUsuario e CPF. Essas duas propriedades retornam o conteúdo dos textboxs com nome do usuário e CPF respectivamente. Abaixo segue o código da página inical (FirstPage.aspx)
protected void btnEnviar_Click(object sender, EventArgs e)
{
Server.Transfer("/SecondPage.aspx");
}
public string NomeUsuario
{
get { return txtNomeUsuario.Text; }
}
public string CPF
{
get { return txtCPF.Text; }
}
Após clicarmos no botão enviar somos redirecionados à segunda página (SecondPage.aspx). Conforme mencionado anteriormente será necessário informar a página anterior na diretiva da página conforme abaixo:
< PreviousPageType VirtualPath="/FirstPage.aspx" >No codebehind da página podemos acessar as propriedades antes criadas na página anterior conforme o código abaixo e o resultado na figura.
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
lblNomeUsuario.Text = PreviousPage.NomeUsuario;
lblCPFUsuario.Text = PreviousPage.CPF;
}
else
{
pnlDadosUsuario.Visible = false;
Response.Write("Não foi possível recuperar os dados do usuário!");
}
}
Quando necessário acessar os dados de uma página com MasterPage, o procedimento é o mesmo, porém será preciso localizar o controle container da MasterPage e em seguida o controle desejado como no exemplo abaixo:
if (Page.PreviousPage != null)
{
ContentPlaceHolder content = (ContentPlaceHolder)PreviousPage.Master.FindControl("ContentMaster");
lblNomeUsuario.Text = ((TextBox)content.FindControl("txtNomeUsuario")).Text;
lblCPFUsuario.Text = ((TextBox)content.FindControl("txtCPF")).Text;
}
else
{
pnlDadosUsuario.Visible = false;
Response.Write("Não foi possível recuperar os dados do usuário!");
}Uma outra forma de redirecionar o usuário a página posterior é através da propriedade PostBackUrl do botão enviar conforme demonstrado abaixo:
<asp:Button ID="btnEnviar" runat="server" PostBackUrl="/SecondPage.aspx"
Style="z-index: 105; left: 25px; position: absolute; top: 112px" Text="Enviar"
Width="62px" />Dessa forma não será necessário chamar o evento OnClick do botão e utilizar o evento Server.Transfer.
Existem outros métodos com os quais podemos armazenar dados e acessá-los posteriormente à medida que for necessário, como por exemplo, Sessions, Cookies e QueryStrings. No entanto o recurso apresentado acima é uma novidade no FrameWork 2.0 e ainda desconhecido por alguns.
Espero que tenha sido útil para todos. Qualquer dúvida, sugestão ou comentário pode ser comentado aqui ou me enviem um email!
Até a próxima!







