Compartir a través de


Cómo: Pasar valores entre páginas Web ASP.NET

Actualización: noviembre 2007

Si en la aplicación se redirige de una página Web ASP.NET a otra, a menudo deseará pasar información de la página de origen a la de destino. Por ejemplo, imagine que tiene una página cuyos usuarios pueden seleccionar los elementos que desean adquirir. Cuando los usuarios envían la página, desea llamar a otra página que procese la información introducida por el usuario.

La información se puede pasar entre páginas de varias formas, algunas de las cuales dependen de cómo se lleve a cabo la redirección. Entre las opciones posibles se encuentran las siguientes:

  • Utilice una cadena de consulta que anexe la información a la dirección URL de la página de destino. Puede emplear este método cuando utilice un control HyperLink para diseñar la exploración de una página o cuando realice la redirección mediante programación a otra página mediante el método Redirect.

    El traspaso de valores en cadenas de consulta funciona aunque las páginas no se encuentren en la misma aplicación Web; también funciona si desea pasar la información a una página que no es una página Web ASP.NET. Si la página de destino es una página Web ASP.NET, puede leer el valor de la cadena de consulta a partir de la propiedad QueryString del objeto HttpRequest.

    Nota:

    Cuando utilice cadenas de consulta no pase nunca datos confidenciales, ya que los usuarios podrán verlos y modificarlos fácilmente, lo que representa un riesgo de seguridad potencial.

  • Utilice el estado de sesión para almacenar información a la podrán tener acceso todas las páginas Web ASP.NET de la aplicación actual. Sin embargo, con este método se consume memoria del servidor y la información permanece almacenada hasta que finaliza la sesión, lo que puede suponer una sobrecarga mayor de la deseada simplemente para pasar información a la página siguiente. Para obtener información detallada, vea Información general sobre la administración de estados de ASP.NET.

  • En la página de destino, lea directamente en la página de origen los valores de los controles y los valores de las propiedades públicas. Esta estrategia funciona en dos situaciones: cuando la página de origen envía mensajes cruzados a la página de destino (para obtener más información, vea Cómo: Enviar páginas Web ASP.NET a una página diferente) y cuando se llama al método Transfer para transferir la ejecución de la página de origen a la página de destino en el servidor. En este tema se describe la estrategia de leer los valores directamente de la página de origen.

Obtener los valores de las propiedades públicas de la página de origen

Si va a diseñar la página de origen expresamente para compartir información con las páginas de destino y ambas son páginas Web ASP.NET, puede agregar a la página de origen las propiedades públicas que exponen la información que desea que compartan las páginas. A continuación, podrá leer los valores de las propiedades en las páginas de destino.

Nota:

Para poder leer las propiedades de la página de origen en la página de destino es necesario que ambas páginas pertenezcan a la misma aplicación Web.

Para obtener los valores de las propiedades públicas de la página de origen

  1. En la página de origen, cree una o varias propiedades públicas.

    En el ejemplo de código siguiente se muestra una propiedad denominada CurrentCity que expone el valor de un control TextBox denominado textCity.

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

    Las propiedades de la página de origen, que se crean principalmente para exponer valores del envío de información entre páginas, suelen ser propiedades de sólo lectura. Aunque la página de origen puede contener propiedades públicas de lectura y escritura, generalmente no tiene sentido establecer una propiedad de la página de origen desde la página de destino, ya que no se conservará el valor.

  2. En la página de destino, agregue una directiva de página @ PreviousPageType que señale a la página de origen.

    En el ejemplo de código siguiente se muestra una directiva PreviousPageType que hace referencia a una página de origen denominada SourcePage.aspx.

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

    La directiva PreviousPageType hace que la propiedad PreviousPage de la página se asigne como tipo a la clase de la página de origen.

  3. En el código de la página de destino, utilice los miembros con establecimiento inflexible de tipos de la propiedad PreviousPage para leer las propiedades del código fuente.

    En el ejemplo de código siguiente se lee el valor de la propiedad CurrentCity definido en la página de origen.

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

Obtener información de los controles de la página de origen en la misma aplicación

Si las páginas de origen y destino son páginas Web ASP.NET y pertenecen a la misma aplicación Web, puede leer los valores de los controles en la página de origen mientras está en la página de destino. Esta estrategia se puede utilizar si la página de origen no expone propiedades públicas que contengan la información necesaria.

Para obtener los valores de los controles de la página de origen en la misma aplicación

  • En la página de destino, obtenga una referencia a la página de origen mediante la propiedad PreviousPage de la página de destino y, a continuación, llame al método FindControl para obtener una referencia al control deseado.

    En el ejemplo de código siguiente se obtiene el valor del control TextBox1 de la página de origen y se muestra en el control denominado 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;
        }
    }
    
    Nota:

    El método FindControl busca el control en el contenedor de nombres actual. Si el control que busca se encuentra en otro control (generalmente, dentro de una plantilla), primero debe obtener una referencia al contenedor y, a continuación, buscar en él el control que desea obtener.

Obtener la información expuesta por la página de origen en otra aplicación

Si las páginas de origen y destino no pertenecen a la misma aplicación Web, puede leer los valores expuestos por la página de origen en la página de destino. Esta técnica también es válida si la página de destino es una página Web ASP.NET y la de origen no lo es. Tenga en cuenta que sólo puede obtener los valores expuestos; no puede leer los valores de los controles arbitrarios de la página.

Para obtener los valores de controles de la página de origen en otra aplicación

  • En la página de destino, lea la colección Form, que devuelve un diccionario de pares de nombre y valor, con un par para cada valor expuesto.

    En el ejemplo de código siguiente se muestra el identificador y el valor de cada uno de los controles expuestos en la página de origen, así como los valores expuestos en una etiqueta denominada Label1.

    Nota:

    Entre la información expuesta en las páginas Web ASP.NET se encuentran los valores de los campos ocultos, como __VIEWSTATE, __EVENTTARGET y __EVENTARGUMENT, que se utilizan para el procesamiento interno de la página. En el ejemplo de código siguiente se excluyen los valores de los campos expuestos cuyo nombre comienza por doble subrayado (__).

    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();
    }
    

Vea también

Tareas

Cómo: Determinar el modo en que se invocaron las páginas Web ASP.NET

Conceptos

Envío entre páginas en las páginas Web ASP.NET

Información general sobre la administración de estados de ASP.NET