Colabora
 

Paso de valores entre páginas utilizando la propiedad PreviousPage de ASP .NET

De Cross-Page Posting y las cosas básicas de ASP .NET

 

Fecha: 27/Ago/2007 (23/08/2007)
Autor: René Huamani Aguilar - (reneh_aguilar@hotmail.com)

 


Introducción

Una de las más básicas interrogantes, cuando uno acaba de ingresar al ASP .NET, es por lo general: ¿Como se pasan valores entre página y página? Y a pesar de que uno tenga en mente los conocidos métodos POST y GET, muy comunes en otros lenguajes de programación Web, me parece (y repito que me parece, nada más) que el uso de estos métodos no es muy común en el .NET, ¿Que hago ahora? (Orale…)

Pues bien, dentro del ASP .NET me he encontrado con una manera muy simple de hacer estos envíos (y recuperaciones). Como que, cuando empecé la cosa se puso muy complicada y nadie sabía explicarme a ciencia cierta y de una manera sencilla este proceso (aquella vez use sesiones) y producto de una reflexión regresiva, me ha parecido que esto les puede servir de algo en sus primeros pininos en el ASP .NET.

Se me olvidaba, ¿Porque menciono el Cross-Page Posting? - La respuesta es simple todos los puntos que trato aquí se refieren a esta técnica en el ASP

Contenido

Para empezar, el ASP .NET posee entre las múltiples propiedades de la clase Page , la muy útil propiedad “PreviousPage” , que se encarga de recuperar la información referente a nuestra página de origen, ;-) pues con esto les he dicho todo, Cuando queramos recuperar un valor que hayamos introducido dentro de algún control de nuestra página de origen, nos bastara con acceder a esta propiedad.

Un aspecto relacionado con el uso de la propiedad PreviousPage es la directiva de página PreviousPageType , esta directiva nos permite determinar una página de origen de tal modo que podemos establecer una acceso secuencial a nuestras páginas, esto quiere decir que uno podria controlar si se accede o no a nuestra página desde otra que nosotros hayamos elegido.

¿Para que les cuento esto? Pues para que puedan entender los dos métodos que he usado para hacer el envió y recepción de valores.

 

El código:

En el ejemplo tenemos un TextBox, un ListBox, un Label y 3 botones. Los dos primeros controles nos servirán para la entrada de datos, el Label nos mostrará un mensaje respectivo cuando hayamos ingresado nuestro pedido. Mientras que los tres botones nos permitirán mostrar como manipular los valores que introduzcamos en 3 diferentes formas. También en el ejemplo, tenemos otras dos páginas además de la que ya describí, las cuales solo tendrán un Label para mostrar cada uno sus propios resultados.

El primer botón nos permite manejar las entradas mediante un Postback local esto quiere decir una llamada a la misma página, algo muy común en el ASP .NET.

Como se muestra en el código lo único que hacemos es llenar el texto del Label de nuestra página principal.

protected void Button1_Click(object sender, EventArgs e)
{
  Label1.Text = " Hola " + TextBox1.Text +
                ", tu pedido han sido " + ListBox1.SelectedValue.ToString();
}

El segundo botón, manejará los valores introducidos en una nueva página, haciendo uso del método FindControl de la clase Page , para esto escribiremos el nombre del control del que queramos recuperar sus valores. Algo importante aquí es que debemos asignar el valor de la propiedad PostBackUrl del mismo con la URL de la página que se supone manejara la entrada de datos; luego, no será necesario agregar ningún código para el evento OnClick.

protected void Page_Load(object sender, EventArgs e)
    {
        TextBox cpTextBox1;
        ListBox cpListBox1;
                
        cpTextBox1 = (TextBox)PreviousPage.FindControl("Textbox1");
        cpListBox1 = (ListBox)PreviousPage.FindControl("ListBox1");

        Label1.Text = " Hola " + cpTextBox1.Text + 
                      ", tu pedido desde la página anterior fueron"+
                      cpListBox1.SelectedValue.ToString();        
    }

<asp:Button ID="Button2" runat="server" PostBackUrl="~/Default1.aspx" Text="Formulario 1" />

El último botón hace lo mismo que el segundo pero con la diferencia de que nos permite usar llamadas a propiedades públicas, en estas propiedades encapsularemos los controles a los que queramos acceder desde otras páginas, para este caso es necesaria la implementación de la directiva PreviousPageType indicando la página de origen por defecto, así:

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

Además dentro de la página de origen, hemos creado un par de propiedades que encapsularán el TextBox y el ListBox

#region "Propiedades"

// Estas propiedades se encargarán de encapsular los controles          
//para que puedan ser accedidos desde otras páginas.

        public ListBox MiLista
        {
            get
            {
                return this.ListBox1;
            }
        }

        public TextBox MiTexto
        {
            get 
            {
                return this.TextBox1;
            }
        }
		
#endregion

Ahora, al momento de llamar a PreviousPage el VS nos mostrará estas propiedades para que podamos trabajar tranquilamente con ellas

protected void Page_Load(object sender, EventArgs e)
    {
        if (IsCrossPagePostBack)
        {
          Label1.Text = " Hola " + PreviousPage.MiTexto.Text + ", tu   
                        pedido en la página anterior han sido "+                
                        PreviousPage.MiLista.SelectedValue.toString();"
        }
        else
        {
            Label1.Text = "No vienes de la pagina correcta.";

            //Este código le vendria mejor en una aplicación real.
            //Response.Redirect("Default.aspx");
        }
        
    }

Por cierto, le he agregado una pequeñez a este código aprovechando la directiva PreviosPageType , verifico que todas las llamadas vengan de la página principal haciendo uso de la propiedad IsCrossPagePostBack en caso de no ser así te mostrara un mensaje de error, alternativamente pueden cambiar el código para que los redirija a la página de inicio. Prueben a hacer una llamada a esta página, sin antes pasar por la principal.

Espero les sea útil

René.


 


Código de ejemplo (comprimido):

 

Fichero con el código de ejemplo: reneh_previouspage_code.zip - 4.60 KB

(MD5 checksum: C3F1C8ED1F654B69165B329D33DF4FBF)

 


Ir al índice principal de el Guille