Pasando Valores entre Paginas

Cuando desarrollamos un proyecto web y empezamos a agregar páginas y se da el caso que necesitamos enviar datos de una pagina otra pagina nos encontramos un problema o se suele hacer la pregunta ¿Como paso estos datos a otra pagina?.


Bien, hay varias formas de consumir o enviar datos a otras paginas, esto se debe al modelo de postback que contempla ASP.NET. Aquellos programadores que conocen ASP, pudieron utilizar el control granular sobre el elemento form, resumiendo, se podía decir a donde el form debería enviar su contenido, así como el método a utilizar (POST/GET) y el número de los elementos form en una página.


En ASP.NET el metodo prederteminado de envio es POST, y que un valor escogido en la page1, sea visto en la page2.


Para el siguiente ejemplos he creado un proyecto con dos paginas “Default.aspx” (Pagina que enviará la información) y “Recepcion.aspx”.


default.aspx


<%@ Page Language=”VB”AutoEventWireup=”true” CodeFile=”Default.aspx.vb” Inherits=”_Default” %>


<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>


<html xmlns=”http://www.w3.org/1999/xhtml”>
       <
head runat=”server”>


              <title>Untitled Page</title>


       </head>


       <body>


       <form id=”form1″ runat=”server”>


              <asp:ScriptManager ID=”ScriptManager1″ runat=”server” />


              <div>


                     <asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>


                     <asp:Button ID=”Button1″ runat=”server” Text=”Enviar” />


              </div>


             </form>


</body>


</html>


En Default.aspx tendremos dos objeto, uno de tipo textbox y otro de tipo Button.


recepcion.aspx


<%@ Page Language=”VB” AutoEventWireup=”false” CodeFile=”Recepcion.aspx.vb” Inherits=”Recepcion” %>


<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>


<html xmlns=”http://www.w3.org/1999/xhtml” >


<head runat=”server”>


<title>Pagina sin t¡tulo</title>


</head>


<body>


<form id=”form1″ runat=”server”>


<div>


<asp:Label ID=”Label1″ runat=”server” Text=””></asp:Label>


</div>


</form>


</body>


</html>


En la página de recepción tendremos un solo objeto de tipo Label.


Puesto que ASP.NET nos permite almacenar elementos en el estado de la sesión actual del proceso, recordemos que HTTP es un protocolo sin estado y que por defecto el servidor no almacena las variables que definamos dentro de cada página o cualquier clase, pero si almacenamos valores dentro de una variable Session, está estará disponible para todas nuestras páginas durante el tiempo que dure la sesión actual (Hasta que cerremos el Browser), este es el método más utilizado.


Utilizando Cross Page


Esta es una nueva característica de ASP.NET 2.0 que nos permite especificar el destino del postback de la página de una manera muy sencilla, para así poder después consumirla.


A continuación se muestra el código asp de la página Default.aspx el código que se ha añadido al objeto Button.

<%@ Page Language=”VB” AutoEventWireup=”true” CodeFile=”Default.aspx.vb” Inherits=”_Default” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head runat=”server”>

<title>Untitled Page</title>

</head>

<body>

<form id=”form1″ runat=”server”>

<asp:ScriptManager ID=”ScriptManager1″ runat=”server” />

<div>

<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>

<asp:Button ID=”Button1″ runat=”server” Text=”Enviar” PostBackUrl=”~/Recepcion.aspx” />

</div>

</form>

</body>

</html>

 

Para que la pagina “Recepcion.aspx” reciba o consuma la información pasa por “Default.aspx” se añade el siguiente código:

 

Partial Class Recepcion

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Page.PreviousPage.IsCrossPagePostBack Then

Dim Txtbox As TextBox = CType(Page.PreviousPage.FindControl(“TextBox1”), TextBox)

If Txtbox IsNot Nothing Then

Me.Label1.Text = Txtbox.Text

End If

End If

 

End Sub

 

End Class

 

Lo que hace este código es buscar un control cuyo ID es “TextBox1” en la página anterior gracias al método FindControl, pero tras a ver

comprobado antes que con la propiedad IsCrossPagePostBack es True y así consumir la información que contiene.

 

Para agregar la propiedad IsCrossPagePostBack hay que agregar la directiva siguiente:

 

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

 

a la página de recepción o destino.

 

Con está directiva también se puede hacer una propiedad pública en la página de origen (default.aspx).

 

Partial Class _Default

Inherits System.Web.UI.Page

 

Public ReadOnly Property Envio() As String

Get

If Me.TextBox1.Text.Length > 0 Then

Return Me.TextBox1.Text

Else

Return Nothing

End If

End Get

End Property

 

End Class

 

Y en la pagina de “Recepcion” ponemos este otro código:

 

Partial Class Recepcion

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Page.PreviousPage.IsCrossPagePostBack Then

‘Dim Txtbox As TextBox = CType(Page.PreviousPage.FindControl(“TextBox1”), TextBox)

‘If Txtbox IsNot Nothing Then

‘ Me.Label1.Text = Txtbox.Text

‘End If

Me.Label1.Text = Me.PreviousPage.Envio()

End If

End Sub

End Class

 

Os preguntareis como puede ser esto posible, la respuesta está en que cuando especificamos que un control va a tener un destino

Postbackurl, estamos añadiendo un nuevo campo oculto dentro de la página, el cual va a almacenar información sobre la misma

para poder ser accedida por la página de destino a traves de su propiedad PreviosPage, la cual tiene una propiedad

IsCrossPagePostBack que nos va a indicar si se genero el Cross Post Back o no.

 

De esta forma podemos optimizar el traspaso de informacion entre paginas, siempre y cuando el escenario lo permita conveniente

Saludos.

 

 

Un comentario en “Pasando Valores entre Paginas”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *