Dev (Back & Front)ARTIGO

Cross Page Posting

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!

é MCP em .Net FrameWork 2.0 C#, graduando em Ciência da Computação pela FAESA, Analista de Sistemas (Desenvolvedor) e desenvolve desde 2004 em ASP clássico, Vb.Net e C#.

Ver perfil