Aqui enumero los posibles metodos de pasaje de datos entre paginas ASP.NET ya sea en el cliente o en el mismo servidor.
Este post lo tenia en borrador y como justamente hoy preguntaron algo similar en los foros y grupos de noticias de ASP.NET lo dejo por aqui para referencia.
Pero espero que este breve resumen sea util (al igual que los enlaces)
- Pasaje con Querystring
- Buscando en la coleccion Request.Form
- Utilizando cookies
- Leer mediante JS en la ventanas popup
- Con una propiedad public dentro de la pagina de origen
- Buscando el control dentro de PreviousPage
- Utilizando las variables de session
- Utilizar Context
OPCION 1: Pasaje con Querystring
El mas famoso y antiguo metodo, aqui ya sabes como debe y donde debe ir las variables… en la URL
Aqui tambien se podria armar con JS (=javascript) lo que quieras con tal de enviar por la URL a la otra pagina, por ejemplo si tienes una pelicula flash que deba enviar por enlaces a otra pagina en la url o si tienes que armar un enlace para que en la llamada a su pagina de destino incluya las variables. Mas info sobre QueryString
Tiene un limite para escribir ya que algunos navegadores no permiten mas que una cierta extension de url (y hay que pensar para navegadores mas antiguos)
Tambien hay metodos para encriptar nuestro querystring, que lo puedes investigar, aqui unos enlaces
OPCION 2: Buscando en coleccion Request.Form
Aqui tambien es casi parecido a como creamos paginas anteriormente.
La idea leer las key de la coleccion Request.Form, esto es conveniente cuando las paginas estan en aplicaciones web diferentes (sitios web separados)
Es un poco (solo un poco) mas seguro que enviar parametros por URL como el anterior metodo (Querystring) aqui las variables van en el encabezado HTTP, por consiguiente podremos enviar mas datos.
Mas info sobre Request.Form
OPCION 3: Utilizando cookies
Aqui podremos guardar pequeñas porciones (y muy pequeñas de informacion) de cadenas de texto, de echo ya lo venimos utilizando con la session de ASP.NET que se guarda por defecto en una cookie
hay que tener en cuenta que es un archivo en el cliente que lo guarda el navegador por un tiempo determinado y que es susceptible al borrado. Pero en algunas ocaciones es util
Mas info: Información general sobre las cookies en ASP.NET
OPCION 4: Leer mediante JS en ventanas popup
Para la pagina previa (padre) o para la hija (el popup open)
Esta tecnica es puro JS, mediante el cual podemos leer controles html en el padre y colocarlas en la pagina hija como viceversa.
Ejemplo: Asignando un valor a un control en la pagina padre (esto es javascript)
var miValor = window.opener.document.Form1.miTextbox.value;
//Otra forma
var miValor = window.opener.document.getByElementId(‘miTextbox’).value;
Ejemplo: Asignando un valor a un control a la pagina hija
//Abriendo una ventana hija
var winHija;
winHija = window.open(...);
//Entonces
var nombre = winHija.document.form1.txtNombre.value;
//o
var nombre = winHija.document.getElementById("txtNombre").value;
OPCION 5: Con una propiedad public dentro de la pagina origen
Y tendrias algo asi en la pagina B:
Label1.Text = PreviousPage.CurrentCity
Aqui un articulo de Sergio Tarrilo
– Pasando variables entre paginas web ASP.NET usando Cross Page Postback (por Sergio Tarrillo)
– Pasando Valores entre Paginas (por Francisco Javier Carbajosa)
(mira el primer enlace mas abajo. Cómo: Pasar valores entre páginas Web ASP.NET)
OPCION 6: Buscando el control dentro de PreviousPage
Aqui la "magia" que hay detras de esto es el Viewstate, el gran contenedor de casi todo y alli es que "viaja" los controles y su estado.
Por eso funciona solo si esta habilitado el viewstate en los controles que necesites recuperar, y ademas que el traspaso de pagina y pagina sea a traves de elementos normales mmm por ejemplo con un popup en JS no sirve este metodo.
Esto de guardar el estado lo hace solo los webcontrol, pero igualmente podremos utilizar este “Repositorio” para guardar algo serializable, ya que se guarda una cadena. Mas info: Cómo: Guardar valores en el estado de vista
Mas info sobre ViewState:
OPCION 7: Utilizando las variables session
Es comun escuchar: "Pon dentro de una variable de session y luego lo recuperas"
Bueno … si no te queda otra hay que hacerlo (pero tampoco es colocar todos tus colecciones de objetos).. estas ocupando memoria del servidor. Mas info sobre Session
Ademas si es por cache hay metodos para realizarlo cache mas optimizados.
Lo malo: No tiene intellisense, ups! pero podrias encapsular, algo asi la idea:
Public Class MiSession
Public Shared Function MiObjeto() as MiClase
Dim obj as MiClase
Try
obj = Ctype(Session("miobj") , MiClase)
Catch ex as Exepcion
End Try
If obj Is Nothing Then
obj = new MiClase
Session("miobj") = obj
End if
return obj
End Function
End Class
OPCION 8: Utilizar Context
Aqui la pregunta es.. que es Context?
"(..)Almacena los valores específicos de solicitud de la aplicación para que se encuentre disponible desde cualquier parte del código que participa en el procesamiento de una solicitud(..)"
Al igual que el ViewState para guardar par de valores en una colecccion y recuperarlas mediante una clave (key) en cada peticion de la pagina este coleccion Context solo es valida para la solcitud (no perdura mas alla de esa peticion) , es decir no para uso exclusivo en el servidor, no va al cliente nada.
Un ejemplo:
Code Snippet
Dim Context As HttpContext
Context = HttpContext.Current
Context.Items.Add("miEjemplo", "UnEjemplo")
Server.Transfer("Pagina2.aspx")
En la otra pagina = Pagina2.aspx
Code Snippet
Dim Context As HttpContext
Context = HttpContext.Current
If Context.Items.Contains("miEjemplo") Then
Me.lblTest.Text = CType(Context.Items("miEjemplo").ToString, String)
'o tambien:
'Me.lblTest.Text = Context.Items("miEjemplo").ToString()
Else
Me.lblTest.Text = "No existe item myItem en el Contexto"
End If
Enlaces