Está en la página 1de 5

2 


 


 
Una página ASP.NET está formada al menos por un único archivo aspx. (archivo
de contenido)
El contenido del archivo de contenido (excepto los controles de servidor o
código del lado de servidor <% %>) se procesa como un archivo HTML en el
navegador.
El archivo aspx puede contener un bloque de script (no compilado) como
JavaScript y VBScript que se ejecuta en el lado de cliente (navegador)
Navegador solicita archivo aspx al servidor Web ± servidor Web procesa la
página ± primera vez, el tiempo de ejecución ASP.NET compila - compila una
clase Page derivada de la case base System.Web.UI.Page ± clase compila
contiene todas las declaraciones de control y el código que forma la página.±
la clase se compila en un ensamblado ± FrameWork ejecuta el ensamblado para
dibujar el resultado en el cliente ± ensamblado almacenado en memoria del
servidor ± siguientes llamadas más rápido (no necesitan compilación)-
El nombre de la clase compilada se deriva del nombre del archivo (atributo
Inherits)
Para que un archivo aspx sea procesado en tiempo de ejecución debe contener
una directiva de página (Page).
Se puede incluir código en una archivo de código oculto (atributo CodeFile de
la directiva Page)
En el archivo de código oculta se declara una clase parcial que hereda de
System.web.UI.Page.
Las clases parciales permiten definir una clase dividida en dos o más archivos
de código. (VS2005 oculta detalles de inicialización de controles de página y
nos permite concentrarnos en los controladores de eventos y otros métodos que
creemos en el archivo aspx.cs).
Los modificadores de acceso determinan qué métodos de clase pueden ver y
utilizar una variable de miembro o un método.
Æp Public ± sin restricciones ± miembros son visibles para cualquier método
de cualquier clase
Æp Private ± solo accesibles para los métodos de la misma clase
Æp Protected ± solo accesibles para métodos de la misma clase y sus clases
derivadas
Æp Internal ± accesibles para cualquier clase del ensamblado de la misma
clase

  
 
Por defecto, cuando se envía una página al servidor, se devuelve a sí misma.
A veces, debemos dirigir el flujo de la aplicación a otra página (directamente
o tras enviar datos al servidor)
Æp HyperLink ± envía directamente a la ubicación de NavigateUrl sin enviar
datos al servidor.
Æp Server.Transfer ± toma URL de la página htm como un argumento de cadena
y envía los datos al servidor. Termina la ejecución de la página actual
y comienza la ejecución de la nueva página. (el método pertenece a la
clase HttpServerUtility). Tras la transferencia a la nueva página, el
navegador continua mostrando el URL de la página original. La historia
del navegador no refleja la transferencia.
Æp Response.Redirect ± (clase HttpResponse) equivale en programación al
hipervínculo. Toma URL de una htm o aspx con argumento de cadena y
realiza una redirección en el lado del cliente, sin enviar los datos al
servidor. Más rápido que Server.Transfer.
Æp Envío entre páginas ± una página puede enviarse al servidor y remitirse
directamente a otra página. (PostBackURL). Solo puede transferirse a una
aspx. Los controles de la página anterior están disponibles usando la
propiedad Page.PreviousPage.

         

   
   




Crea un nuevo Sitio Web llamado Enviopaginas
En la página Default.aspx creamos tres button (ID y Text como ServerTransfer,
Redirect, CrossPage).

c  
  
Los tres botones van a una página llamada PaginaObjetivo.
protected void btnServerTransfer_Click(object sender, EventArgs e)
{ Server.Transfer("TargetPage.aspx");
}
protected void btnRedirect_Click(object sender, EventArgs e)
{ Response.Redirect("TargetPage.aspx");
}
El botón CrossPage se le marca en PostBackUrl
Si probamos nuestro sitio Web podemos comprobar:
ServerTransfer apunta en el navegador a la página original aunque muestra la
página Objetivo.
Redirect y PostBackUrl funcionan igual parece. Redirect no envia datos al
servidor (no puede ejecutar código del lado de servidor)
Piensa un ejemplo y una utilidad para este caso.

d
  
   
Al enviar datos a una página diferente, tal vez sea necesario acceder a
controles y objetos de la página anterior. Es posible acumular estos datos de
envío entre páginas:
En estado de sesión (consume recursos)
Propiedad PreviousPage de la clase Page
Asignación rigurosa: objeto tiene colección de miembros públicos que se
recuperan con propiedad PreviousPage (PreviousPage.objeto)
Asignación dinámica: vinculación estática, encontrar el control
específico con el método FindControl del Page (reducción de rendimiento)

    
Para asignar rigurosamente el objeto Page PreviousPage, el archivo de
contenido de la página de destino debe tener directiva adicional
PreviousPageType. Atributos:
Æp TypeName. Cadena que representa el tipo de la página anterior.
Æp VirtualPath. Cadena representa el URL relativo de la página anterior.

       
          
    
 



Creamos un ddl en Default con AutoPostBack.
En el código oculto de Default creamos un método que nos permita leer el ddl.
El objeto Page devuelto por la propiedad PreviousPage solo puede acceder a
miembros públicos:
public DropDownList Actividad
{
get { return DropDownList1; }
}
Hemos creado una clase pública llamada Actividad del tipo ddl.
Si añadimos set podríamos hacer la clase también de escritura. (pero así es
suficiente).
En la página Objetivo modificamos su HTML para añadir la directiva:
<%@ PreviousPageType VirtualPath="~/Default.aspx" %>
Y una etiqueta con un texto cualquiera. En esta label vamos a mostrar el valor
recuperado del ddl de la página anterior.
En el archivo de código oculto de página Objetivo
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
if (Page.PreviousPage != null)
{
lblActividad.Text=PreviousPage.Actividad.SelectedItem.ToString();
}
}
Comprueba si se ha establecido la propiedad PreviousPage. Si no se ha
establecio (hemos llegado con Redirect por ejemplo)se muestra el texto
asignado primero). Si se ha asignado PreviousPage enviando la solicitud al
servidor (Server.Transfer o con PostBackUrl) la label se rellena con los datos
del ddl.

c  
  

     
El caso anterior tiene varios problemas.
Solo podemos transferir datos en controles con la página anterior
(PreviousPage)
Debemos conocer el nombre de cada página al crear el sitio
Al utilizar asignación dinámica no necesitamos el método público Actividad ni
la directiva PreviousPageType.
En el código oculto de la página Objetivo:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
if (Page.PreviousPage != null)
{
DropDownList ddl =
(DropDownList)Page.PreviousPage.FindControl("DropDownList1");

if (ddl != null)
{
lblActividad.Text = ddl.SelectedItem.ToString()+"dinamico"
;
}
}
}
Utiliza el método FindControl de Pageclass para obtener directamente la
referencia al ddl. Con Redirect nunca llega a través del servidor por lo que
la Label nunca se rellenará.
Este sistema consume más recursos.

    
 
Page tiene dos propiedades de tipo booleano que nos permiten saber cómo hemos
llegado a dicha página.
IsPostBack ± indica si se está cargando en respuesta a un envío del cliente.
False dice que se carga por primera vez.
IsCrossPagePostBack ± true indica que esta página está invocando a otra
página.



Creamos etiquetas en ambas páginas en donde sus Text sean las propiedades
comentadas.
En sus códigos ocultos (Page_Load) cargamos los Text con los resultados de
dichas propiedades.
En Default en su HTML:
Tres etiquetas con sus ID para determinar IsPostBack, IsCrossPagePostBack,
PreviousPage
En su código oculto:
protected void Page_Load(object sender, EventArgs e)
{
LblIsPostBack.Text = IsPostBack.ToString();
lblIsCrossPagePostBack.Text = IsCrossPagePostBack.ToString();
if (Page.PreviousPage != null)
{
lblPreviousPage.Text = Page.PreviousPage.Title;
}
}
En página Objetivo en su HTML
Añadimos dos etiquetas más para saber si PreviousPage ha sido IsPostBack o
IsCrossPagePostBack
Su código oculto sería:
LblIsPostBack.Text = IsPostBack.ToString();
lblIsCrossPagePostBack.Text = IsCrossPagePostBack.ToString();
if (Page.PreviousPage != null)
{
lblPreviousPage.Text = Page.PreviousPage.Title;
lblPreviousPageIsPostBack.Text =
Page.PreviousPage.IsPostBack.ToString();
lblPreviousPageIsCrosPagePostBack.Text =
Page.PreviousPage.IsCrossPagePostBack.ToString();

c  
  
}

c  
  
   
¿Es posible disponer una página ASP.NET formada por un único archivo?
¿qué extensión debería tener ese archivo?
¿es posible incluir código script en un archivo aspx?
¿está compilado ese lenguaje de script?
Cita algunos ejemplos de lenguajes de script válidos
¿es posible contener bloques de código del lado del servidor?
¿qué lenguajes podemos usar?
¿cómo es posible almacenar esta código?
¿qué debe hacer el servidor web cuando el navegador solicita el archivo aspx
por primera vez?
¿qué clase se compila? ¿de qué clase base deriva dicha clase?
¿en qué se compila la clase?
¿Qué hace FrameWork?
¿son más rápidas las posteriores llamadas al servidor Web?
¿dónde se puede ver el nombre de la clase compilada?
¿qué es necesario para que un archivo aspx sea procesado por el tiempo de
ejecución ASP.NET?

c