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
- How to Encrypt Query String Parameters in ASP.NET
- Módulo HTTP para encriptar automáticamente los query strings.
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
- Cómo: Pasar valores entre páginas Web ASP.NET
http://msdn2.microsoft.com/es-es/library/6c3yckfw(VS.80).aspx - Envío entre páginas en las páginas Web ASP.NET
http://msdn2.microsoft.com/es-es/library/ms178139(VS.80).aspx - Cómo: Enviar páginas Web ASP.NET a una página diferente
http://msdn2.microsoft.com/es-es/library/ms178140(VS.80).aspx - Pasar valores de control de servidor entre páginas
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconpassingservercontrolvaluesbetweenpages.asp - Pasar valores entre páginas de formularios Web Form
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vbcon/html/vbtskpassingvaluesbetweenwebformspages.asp - HttpContext
http://msdn2.microsoft.com/es-es/library/system.web.httpcontext.aspx - Passing values from a page to another by means of the Context object
http://www.devx.com/vb2themax/Tip/18847 - State management with Context.Items in ASP.NET
http://www.csse.monash.edu.au/courseware/cse2030/2004/state.html - Un muy buen articulo sobre Context
– Cuestión de contextohttp://www.microsoft.com/spanish/msdn/articulos/archivo/210302/voices/asp01242002.asp
- StateBag
http://msdn2.microsoft.com/es-es/library/system.web.ui.statebag.aspx - StateBag.Add (Método)
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfSystemWebUIStateBagClassAddTopic.asp - StateBag (Propiedades)
http://msdn2.microsoft.com/es-es/library/system.web.ui.statebag_properties(VS.80).aspx
Muy buen recopilatorio, y muchas veces no se tiene claro que modelo usar.
Y no abusar tampoco, no voy a pasar 15 o 20 variables de una página a otra (para ahorrar un coste en ya no ir a la base de datos) ahorras en viaje pero tiene un costo. A veces es más simple pasar el id, recuperarlo en la otra página, y obtener el resto de la información de la base de datos.
Saludos,
Hola espinete
Me gusto como preguntaste! «desarrollos reales» 🙂
Bueno casi como que utilice TODOS, desde el mas simple por querystring con datos no sensibles (pero ultimamente estoy ocultando la url, haciandola mas user-friendly con URLRewriter), otros datos los obtengo de los controles en el mismo postback. En algunas oportunidades tuve que realizar con js envios desde ventanas padres a hijas y viceversa, un dolor de cabeza pero era necesario, hoy tengo muchas ventanas modales para que no sean window.open je
Y con Context lo utilizo para en la misma peticion tener un metodo de obtener informacion en un control y leerlo en otro control que renderiza UI
La idea del post era que tengas un pantallazo y que en base a tu experiencia, logres detectar cual utilizar en un momento determinado.
Saludos
Cuando estaba publicando Federico en producción un proyecto (esto quiere decir que esta en etapas
Buenos días,
La consulta que voy a realizar no estoy seguro si tiene algo que ver con el tema del foro pero si me pueden ayudar, les estaré muy agradecido.
Por favor ayúdenme, con esto:
Necesito crear un script que envíe parámetros post a una web.
La web es “http://evtde.argonautanet.com/Varios/ComprobacionTelefono.aspx”.
Y los parámetros post que quiero enviar son:
FRAME F=0
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:aspnetForm ATTR=ID:ctl00_Main_txtTelefono CONTENT=12344556
ONDIALOG POS=1 BUTTON=OK CONTENT=
TAG POS=1 TYPE=INPUT:IMAGE FORM=ID:aspnetForm ATTR=ID:ctl00_Main_BtnComprobar
Saludos
buenas tardes tengo una duda se que no tiene relacion con esto pero bueno:
espero y me puedas ayudar desde hace ya rato que mi servidor web se cayo pero egun esto ya quedo pero apartir de alli cuando trato de cargarle algun codigo este no se actualiza al 100% o no se actualiza antes lo hacia con el remot de visual studio directamente al servidor pero desde que se daño el server ya no lo puedo hacer me dice que no tiene las extenciones de front page y ya se las trate de instalar pero nada no me permite espero y me puedan ayudar
exelente me aclaro muchas dudas amigo mio….
Por favor sean mas especificos nadie nacio sabiendo gracias
Excelente. Muestra varias alternativas, solo hay q recordar q se requiere en el diseño y q el código varía de un lenguaje a otro.