Extensiones UML para aplicaciones web - Rocío Santiago
Practica prog pag_dinam
1. TRANSFERENCIA DE VARIABLES POR URL
Cómo: Redirigir los usuarios a otra página
En determinadas circunstancias, es posible que desee redirigir a los usuarios de una página
Web ASP.NET a otra página Web. Por ejemplo, como parte de un formulario con múltiples
páginas.
Existen varias maneras de redirigir páginas, como las siguientes:
Configurar la página para que envíe a otra página En este escenario, el usuario
hace clic en un botón que se ha configurado para que redirija el explorador a una
página diferente. Este escenario es útil para los formularios con múltiples páginas. Sin
embargo, requiere interacción con el usuario. Para obtener información detallada.
Utilizar dinámicamente el explorador En este escenario, se envía un comando al
explorador del usuario que hace que el explorador recupere otra página. Esto le
permite redirigir a otra página mediante programación. Sin embargo, la redirección
produce una nueva solicitud (de tipo HTTP GET) y los datos expuestos de la página de
origen se pierden.
Utilizar dinámicamente un método de servidor En este escenario, el servidor simplemente
transfiere el contexto a otra página. La ventaja es que puede compartir información de
contexto de página entre páginas. El inconveniente es que el explorador del usuario no tiene
conocimiento de la transferencia, por lo que no se actualiza su historial. Si el usuario actualiza
la página, pueden producirse resultados inesperados. Para obtener información detallada
sobre cómo compartir el contexto de página durante una transferencia de servidor.
Para redirigir a un usuario a otra página mediante el explorador
1. Establezca la propiedad BufferOutput del objeto Response en true.
2. Llame al método Redirect del objeto Response y pásele la dirección URL de la página a
la que desea redirigir a los usuarios.
En el ejemplo de código siguiente se muestra cómo redirigir una página basándose en
el contenido de una variable local,UserLanguage, que se ha establecido en otra parte.
VB
Response.BufferOutput = True
IfUserLanguage = "English"Then
Response.Redirect("http://www.microsoft.com/gohere/look.htm")
ElseIfUserLanguage = "Deutsch"Then
Response.Redirect("http://www.microsoft.com/gohere/look_deu.htm")
ElseIfUserLanguage = "Español"Then
Response.Redirect("http://www.microsoft.com/gohere/look_esp.htm")
EndIf
Para redirigir a los usuarios a otra página utilizando un método de servidor
2. Llame al método Transfer y pásele el nombre de la página a la que desea redirigir a los
usuarios.
En el ejemplo de código siguiente se muestra cómo realizar la redirección a otra
página.
VB
ProtectedSub Button1_Click(ByVal sender AsSystem.Object, _
ByVal e AsSystem.EventArgs) Handles Button1.Click
Server.Transfer("Page2.aspx", True)
EndSub
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.
3. 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 y cuando se llama al métodoTransfer 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
controlTextBox denominado textCity.
VB
PublicReadOnlyPropertyCurrentCity() AsString
Get
ReturntextCity.Text
EndGet
EndProperty
C#
public String CurrentCity
{
get
{
returntextCity.Text;
}
}
Nota
4. 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.
<%@ PreviousPageTypeVirtualPath="~/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 PreviousPagepara 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.
VB
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:
VB
IfNotPage.PreviousPageIsNothingThen
DimSourceTextBoxAsTextBox
SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
TextBox)
IfNotSourceTextBoxIsNothingThen
5. Label1.Text = SourceTextBox.Text
EndIf
EndIf
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 (__).
VB
SubPage_Load(ByVal sender AsObject, ByVal e AsSystem.EventArgs) _
HandlesMe.Load
DimdisplayValuesAsNewStringBuilder()
DimpostedValuesAsNameValueCollection = Request.Form
6. DimnextKeyAsString
ForiAsInteger = 0 TopostedValues.AllKeys.Length - 1
nextKey = postedValues.AllKeys(i)
IfnextKey.Substring(0, 2) <>"__"Then
displayValues.Append("<br>")
displayValues.Append(nextKey)
displayValues.Append(" = ")
displayValues.Append(postedValues(i))
EndIf
Next
Label1.Text = displayValues.ToString()
EndSub
TRANSFERENCIA DE VARIABLES POR FORMULARIO
La necesidad y utilidad del método session para transferir variables
En los programas que hemos visto hasta ahora, hemos utilizado variables que solo existían en el
archivo que era ejecutado. Cuando cargábamos otra página distinta, los valores de estas variables se
perdían a menos que nos tomásemos la molestia de pasarlos por la URL o inscribirlos en las cookies o
en un formulario para su posterior explotación. Estos métodos, aunque útiles, no son todo lo prácticos
que podrían en determinados casos en los que la variable que queremos conservar ha de ser utilizada
en varios scripts diferentes y distantes los unos de los otros.
Podríamos pensar que ese problema puede quedar resuelto con las cookies ya que se trata de
variables que pueden ser invocadas en cualquier momento. El problema, ya lo hemos dicho, es que las
cookies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los navegadores lo
cual implica que una aplicación que se sirviera de las cookies para pasar variables de un archivo a otro
no sería 100% infalible.
Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces
como queramos dentro de una misma sesión. Imaginemos un sitio multilingüe en el que cada vez que
queremos imprimir un mensaje en cualquier página necesitamos saber en qué idioma debe hacerse.
Podríamos introducir un script identificador de la lengua del navegador en cada uno de los archivos o
bien declarar una variable que fuese valida para toda la sesión y que tuviese como valor el idioma
reconocido en un primer momento.
Estas variables que son válidas durante una sesión y que luego son "olvidadas" son definidas con el
objeto Session de la siguiente forma:
Session("nombre de la variable") = valor de la variable
Una vez definida, la variable Session, será almacenada en memoria y podrá ser empleada en cualquier
7. script del sitio web.
La duración de una sesión viene definida por defecto en 20 minutos. Esto quiere decir que si en 20
minutos no realizamos ninguna acción, el servidor dará por finalizada la sesión y todas las variables
Session serán abandonadas. Esta duración puede ser modificada con la propiedad Timeout:
Session.Timeout = n° de minutos que queramos que dure
Una forma de borrar las variables Session sin necesidad de esperara que pase este plazo es a partir del
método Abandon:
Session.Abandon
De este modo todas las variables Session serán borradas y la sesión se dará por finalizada. Este
método puede resultar practico cuando estemos haciendo pruebas con el script y necesitemos
reinicializar las variables.
Lo que se suele hacer es crear un archivo en el que se borran las cookies y se abandona la sesión. Este
archivo será ejecutado cuando queramos hacer borrón y cuenta nueva