Como: Passar valores entre páginas da Web do ASP.NET

Se o seu aplicativo redireciona (navega) de uma página da Web ASP.NET para outra, frequentemente será desejável passar informações da página fonte para a página de destino.Por exemplo, você pode ter uma página onde os usuários podem selecionar itens para comprar.Quando os usuários submetem a página, você quer chamar uma outra página que possa processar as informações que o usuário inseriu.

Você pode passar informações entre as páginas de várias maneiras, algumas delas dependem de como o redirecionamento ocorrerá.As opções incluem as seguintes:

  • Usar uma string de consulta, que acrescenta informações à URL da página de destino.Você pode usar uma sequência de caracteres de consulta ao usar um controle HyperLink para criar navegação em uma página ou quando você está, por meio de programação, redirecionando para outra página usando o método Redirect.

    Passar os valores em um sequência de caracteres de consulta funciona mesmo se as páginas não estiverem no mesmo aplicativo da Web; também funciona se você desejar passar informações para uma página que não é uma página da Web ASP.NET.Se a página de destino for um página da Web ASP.NET, você pode ler o valor da sequência de caracteres de consulta fora da propriedade QueryString do objeto HttpRequest.

    Observação:

    Nunca passe dados confidenciais usando uma string de consulta, pois as informações são visíveis aos usuários e facilmente podem ser modificadas, o que representa um risco de segurança potencial.

  • Usar o estado de sessão (session state) para armazenar informações que depois sejam acessíveis a todas as páginas da Web ASP.NET no aplicativo atual.Entretanto, isso ocupa memória do servidor, e as informações são armazenadas até que a sessão expire, o que pode ser mais sobrecarga do que você deseja para simplesmente passar informações para a próxima página.Para obter detalhes, consulte:Visão Geral sobre o Gerenciamento de Estado do ASP.NET.

  • Na página de destino, ler valores de controles e valores de propriedades públicas diretamente da página fonte.Essa estratégia funciona em duas situações: Quando posts da página fonte cross-página de destino (para obter mais informações, consulte Como: Postar páginas da Web do ASP.NET para uma página diferente), e quando você chama o Transfer método transferência a execução da origem para a página de destino no servidor. A estratégia de leitura de valores diretamente da página fonte é descrita neste tópico.

Obtendo Valores de Propriedades Públicas da Página de Origem

Se você está criando a página fonte especificamente para compartilhar informações com as páginas de destino, e ambas as páginas são páginas da Web do ASP.NET, na página fonte você pode adicionar propriedades públicas que expõem informações que você deseja compartilhar entre as páginas.Você pode então ler os valores das propriedades nas páginas de destino.

Observação:

Você pode ler propriedades da página fonte na página de destino somente se ambas as páginas estiverem no mesmo aplicativo da Web.

Para obter valores de propriedades públicas da página fonte

  1. Na página fonte, crie uma ou mais propriedades públicas.

    O exemplo de código a seguir mostra uma propriedade chamada CurrentCity que expõe o valor de um controle TextBox chamado textCity.

    Public ReadOnly Property CurrentCity() As String
        Get
            Return textCity.Text
        End Get
    End Property
    
    public String CurrentCity
    {
        get
        {
            return textCity.Text;
        }
    }
    
    Observação:

    As propriedades da página de origem que são criadas principalmente para expor valores para postagem entre páginas são geralmente propriedades somente-leitura.Embora a página de origem possa conter propriedades públicas de leitura / gravação, definir uma propriedade da página de origem para a propriedade da página de destino geralmente não tem finalidade, porque o valor não será persistente.

  2. Na página de destino, adicione uma diretiva de página @ PreviousPageType que aponte para a página fonte.

    O exemplo de código a seguir mostra uma diretiva PreviousPageType que faz referência a uma página fonte denominada SourcePage.aspx.

    <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
    

    A diretiva PreviousPageType faz com que a propriedade PreviousPage da página seja digitada na classe da página fonte.

  3. No código da página de destino, use membros fortemente tipados da propriedade PreviousPage para ler as propriedades do código-fonte.

    O exemplo de código a seguir lê o valor da propriedade CurrentCity que é definido na página fonte.

    Label1.Text = PreviousPage.CurrentCity
    
    Label1.Text = PreviousPage.CurrentCity;
    

Obtendo informações de controle a partir da página fonte no mesmo aplicativo

Se as páginas de fonte e de destino forem ambas páginas da Web ASP.NET e estiverem no mesmo aplicativo da Web, você pode ler os valores dos controles na página fonte enquanto estiver na página de destino.Você pode usar essa estratégia se a página fonte não expuser as propriedades públicas contendo a informação que você precisa.

Para obter os valores de controles da página fonte no mesmo aplicativo

  • Na página de destino, obtenha uma referência para a página fonte usando a propriedade PreviousPage da página de destino e, em seguida, chame o método FindControl para obter uma referência para o controle desejado.

    O exemplo de código a seguir obtém o valor do controle TextBox1 da página de origem e o exibe em um controle chamado Label1:

    If Not Page.PreviousPage Is Nothing Then
        Dim SourceTextBox As TextBox
        SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
            TextBox)
        If Not SourceTextBox Is Nothing Then
            Label1.Text = SourceTextBox.Text
        End If
    End If
    
    if (Page.PreviousPage != null)
    {
        TextBox SourceTextBox = 
            (TextBox)Page.PreviousPage.FindControl("TextBox1");
        if (SourceTextBox != null)
        {
            Label1.Text = SourceTextBox.Text;
        }
    }
    
    Observação:

    O método FindControl localiza controles no contêiner de nomeação atual.Se o controle que você estiver procurando estiver dentro de outro controle (normalmente, dentro um template), você deve primeiro obter uma referência para o contêiner, e procurar no contêiner para localizar o controle que você deseja obter.

Obtendo informações de post da página fonte em outro aplicativo

Se as páginas de fonte e de destino não estiverem no mesmo aplicativo da Web, você pode ler os valores postados da página fonte na página de destino.Essa técnica também funciona se a página de destino é um página da Web ASP.NET mas a página fonte não é.Observe que você pode obter apenas os valores postar; você não pode ler os valores das arbitrário controles na página.

Para obter os valores de controles da página fonte em outro aplicativo

  • Na página de destino, leia a coleção Form, que retorna um dicionário de pares nome/valor, um par para cada valor lançado.

    O exemplo de código a seguir exibe a identificação e o valor de cada controle postado na página fonte e exibe os valores postados em um rótulo denominado Label1.

    Observação:

    Informações de post de uma ASP.NET Web pages incluem os valores dos campos ocultos, como __VIEWSTATE, __EVENTTARGET e __EVENTARGUMENT, que são usados para processamento interno na página.O exemplo de código a seguir exclui os valores de campos postados que são nomeados com um sublinhado duplo à esquerda (__).

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        Dim displayValues As New StringBuilder()
        Dim postedValues As NameValueCollection = Request.Form
        Dim nextKey As String
        For i As Integer = 0 To postedValues.AllKeys.Length - 1
            nextKey = postedValues.AllKeys(i)
            If nextKey.Substring(0, 2) <> "__" Then
                displayValues.Append("<br>")
                displayValues.Append(nextKey)
                displayValues.Append(" = ")
                displayValues.Append(postedValues(i))
            End If
        Next
        Label1.Text = displayValues.ToString()
    End Sub
    
    void Page_Load(object sender, EventArgs e)
    {
        System.Text.StringBuilder displayValues = 
            new System.Text.StringBuilder();
        System.Collections.Specialized.NameValueCollection 
            postedValues = Request.Form;
        String nextKey;
        for(int i = 0; i < postedValues.AllKeys.Length - 1; i++)
        {
            nextKey = postedValues.AllKeys[i];
            if(nextKey.Substring(0, 2) != "__")
            {
                displayValues.Append("<br>");
                displayValues.Append(nextKey);
                displayValues.Append(" = ");
                displayValues.Append(postedValues[i]);
            }
        }
       Label1.Text = displayValues.ToString();
    }
    

Consulte também

Tarefas

Como: Determinar como foram invocadas páginas da Web do ASP.NET

Conceitos

Postagem entre Páginas em Páginas da Web do ASP.NET

Visão Geral sobre o Gerenciamento de Estado do ASP.NET