módulo_11_aplicaciones web con asp

147
CREACIÓN DE UN PROYECTO WEB ASP.NET © élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Upload: pablo-alvarez

Post on 24-Jul-2015

438 views

Category:

Documents


20 download

DESCRIPTION

Diferencias entre ASP y ASP.NET. Creación de un proyecto web ASP.NET, Funcionamiento de una página ASP.NET y su ciclo de vida, Programación basada en eventos; formularios Web, Controles HTML, Controles WEB, Controles Web para la validación de datos, Mantenimiento del estado en aplicaciones ASP.NET, Personalización de aplicaciones, Prácticas.

TRANSCRIPT

Page 1: Módulo_11_Aplicaciones Web con ASP

CREACIÓN DE UNPROYECTO WEB

ASP.NET

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 2: Módulo_11_Aplicaciones Web con ASP

ÍNDICE

CREACIÓN DE UN PROYECTO WEB ASP.NET

1. Diferencias entre ASP y ASP.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Creación de un proyecto Web ASP.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16

3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

Page 3: Módulo_11_Aplicaciones Web con ASP

1. Diferencias entre ASP y ASP.Net

Objetivo y Estructura de la lección

1- Conocer cuáles son las diferencias entre ASP y ASP.Net2- Conocer cómo es la creación de un proyecto Web ASP.Net

El paso de ASP a ASP.Net

ASP.NET reemplaza totalmente a ASP. Aporta una metodología muy distinta para obtener aplicaciones Web através de Internet.

ASP y ASP.NET son muy diferentes:

- Pueden trabajar cooperativamente, así nuestro servidor Web puede procesar tanto páginas ASP comoASP.NET.

- Instalado el motor ASP.NET, no tendremos que volver a implementar las antiguas páginas ASP.

Script interpretado en el servidor

El ASP clásico está generado sobre el sistema operativo de Windows e IIS. Ha sido algo independiente y, porello, su funcionalidad estaba limitada. Todo el código es interpretado.

CREACIÓN DE UN PROYECTO WEB ASP.NET

3

Page 4: Módulo_11_Aplicaciones Web con ASP

ASP.NET está integrado con el Sistema Operativo bajo el .NETFramework, compartiendo objetos que las aplicaciones tradicionales,y todos los objetos .NET, están disponibles para el desarrollo enASP.NET. En lugar de estar limitado como ASP, ASP.NET tiene a sudisposición toda una novedosa colección de componentes.

Diferencias entre ASP Y ASP.Net

- Con ASP el cliente y el servidor son dos entidades por separado.

- Una vez que ASP finaliza su trabajo en el servidor, pasa el HTML al cliente y se olvidaba de él.

- El ASP clásico utiliza lenguajes interpretados de secuencias de comandos.

- ASP.NET vincula al cliente y al servidor mediante codificación intrínseca que no es obvia para eldesarrollador.

- El desarrollo Web es más parecido al desarrollo de las aplicaciones tradicionales que al modelodesvinculado petición-respuesta característico de ASP.

- El código de ASP.NET es compilado, lo cual hace que tenga un mejor rendimiento, y en consecuencialas páginas ASP.NET más similares a las aplicaciones tradicionales.

4

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 5: Módulo_11_Aplicaciones Web con ASP

5

Algunas características de ASP.Net

En virtud de lo anterior ASP.NET pone un gran potencial en las manos del desarrollador.

Almacenamiento y distribución

ASP.NET ofrece muchas mejoras programáticas, entre las que se incluye el almacenamiento en caché,compilación de código y mayor simplicidad y seguridad.

Cabe destacar en ASP.NET su facilidad en la distribución. Los metadatos almacenan toda la informaciónnecesaria para las aplicaciones, por lo que ya no tendremos que registrar aplicaciones Web u objetos COM.

Cuando distribuimos aplicaciones clásicas de ASP, necesitamos las DLL correspondientes y utilizarREGSVR32.exe para registrar los componentes. Con ASP.NET, todo lo que necesitamos es copiar los archivosDLL. El .Net Framework se ocupará de lo demás, destacando nuevamente su sencillez.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 6: Módulo_11_Aplicaciones Web con ASP

Estado de sesión en ASP

El estado de sesión era un concepto muy importante en el ASP clásico.

Es la facultad de determinar automáticamente si una secuencia de peticionesproviene del mismo cliente, principalmente mediante el uso de las cookies.

Conforme los sitios Web empezaban a moverse hacia las granjas de servidores(conjunto de servidores que manejan el mismo sitio Web), los desarrolladoresempezaron a darse cuenta de las limitaciones del manejo de sesiones basadoen ASP. Entre estas limitaciones está el que las sesiones no puedentransferirse entre servidores.

Manejo de sesiones

El manejo de sesiones facilitó mucho y se hizo más potente con ASP.NET. Esta tecnología solventa este aspectoal integrar el uso de sesiones que pueden ampliarse a granjas Web. Además ofrece la confiabilidad de quepodrá, incluso, sobrevivir a colapsos del servidor y trabajar con exploradores Web que no puede utilizar lascookies.

6

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 7: Módulo_11_Aplicaciones Web con ASP

7

Vinculación del servidor con el cliente

ASP.NET vincula al servidor y al cliente de formas que eran imposibles en el ASP clásico. El desarrollo deaplicaciones ASP.NET necesita una metodología más intuitiva.

El desarrollador ya no tendrá que preocuparse por recordar la información del estado del usuario o de solicitarvariables de captura, todo lo maneja ASP.NET. El desarrollador se centra más en responder a las acciones delusuario sin atender a detalles como el modelo petición-respuesta.

Orientación de ASP.NET

El ASP clásico hizo un esfuerzo por presentar el concepto de programación orientada a objetos (POO), perono pudo porque era un paradigma de programación radicalmente distinto. Los desarrolladores que esténhabituados a los aspectos de la POO trabajarán con soltura en ASP.NET, y quines no lo estén verán que es fácilde usar así como de aprender.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 8: Módulo_11_Aplicaciones Web con ASP

8

Los desarrolladores de ASP no deberán preocuparse ya que aunque haymuchas modificaciones en ASP.NET, la mayoría aún se aplican. ASP.NETfacilita mucho las cosas la mayor parte del tiempo; en tanto que es unadelanto lógico en la programación para Internet.

Procesamiento de páginas ASP.Net

Para procesar las páginas ASP.NET, necesitamos un servidor Web (IIS) y el SDK del .NET Framework. Estasherramientas proveen las bases y estructuras para ejecutar las páginas ASP.NET. Estas páginas deberán serprocesadas mediante un servidor Web.

El .NET Framework es un conjunto de proyectos y objetos. Las aplicacionesdesarrolladas dentro de este marco de trabajo se compilan al LenguajeIntermedio de Microsoft (MSIL) y producen metadatos que las describen. ElCommon Language Runtime compila el MSIL a código máquina y utiliza losmetadatos para dar soporte a la ejecución de las aplicaciones.

Comparación de páginas ASP con páginas ASP.Net

Comparando ASP.NET con su predecesor, las Páginas Activas de Servidor (ASP),ASP.NET provee un mejor marco de trabajo para generar aplicaciones Web yes más sencillo e intuitivo de utilizar. Aporta otras mejoras programáticas.Bastantes de los conceptos programáticos del ASP clásico aún se aplican enASP.NET, por lo que los desarrolladores de ASP apenas sí tendrán dificultad enASP.NET.

Son una tecnología para servidor que permiten generar páginas Web activas.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 9: Módulo_11_Aplicaciones Web con ASP

9

Extensión .aspx

Las páginas ASP.NET son sólo de texto, como las HTML. Una vez que tengamosun servidor Web y el SDK de .NET Framework en ejecución, podremos generarfácilmente páginas ASP.NET en cualquier editor de texto que deseemos.

Las páginas ASP.NET tienen la extensión .aspx, por lo que cualquier archivo que queramos que el servidorinterprete como página ASP.NET deberá tener dicha extensión. Para empezar crearemos un archivo sencillo.

Ejemplo

Abrimos el Bloc de notas y creamos el siguiente código.

Creamos un directorio Web y guardamos ese archivo. Esta página tan sólo muestra un mensaje de iniciohacia ASP.NET. Abrimos el explorador Web y accedemos a esta página con el URL

http://localhost/net/index.aspx

Exploradores Web

Los exploradores Web sólo reconocen HTML, aunque algunos otros también reconocen XML.

En el Internet Explorer seleccionamos el menú Ver/Código fuente y aparecerá lo siguiente:

<html><body><span id="lblMensaje">Comenzando ASP.NET</span></body></html>

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 10: Módulo_11_Aplicaciones Web con ASP

Traducción a HTML

Veamos cómo fue la traducción a HTML.

ASP.NET compiló y convirtió en un MSIL, que luego fue compilado a lenguajemáquina por el CLR y ejecutado. ASP.NET tradujo todo su resultado a HTMLdado que es el único lenguaje, junto con XML, que los exploradores Webpueden leer.

Aunque nos guste mucho el Bloc de notas, no es la aplicación ideal para crearpáginas ASP.NET. Es más rápido y fácil de usar, pero no ofrece muchasfacultades para facilitar el desarrollo de aplicaciones ASP.NET.

Editor Microsoft Visual Studio.NET

El Microsoft Visual Studio.NET es otro editor. Este producto nos permite administrar sitios Web completos ynos ofrece características como la creación y eliminación de directorios virtuales, uso de bases de datos yel arrastre y colocación de componentes HTML. También distingue, mediante colores, el código de ASP.NETpara facilitar su lectura.

Veamos el siguiente código:Esta página destaca los elementos comunes de las páginas ASP.NET.

10

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 11: Módulo_11_Aplicaciones Web con ASP

11

Línea azul (1)Está la directiva <%@ Page %>, que da la información específica a la página ASP.NET de lo que se utilizarádurante el proceso de compilación. En ese caso, dirá a ASP.NET que utilizará el lenguaje de programaciónVisual Basic para escribir su código.

Líneas morada (2-6)Contienen un bloque de código conocido como bloque de declaración de código. Esto se parece al código enel lado del cliente, pero incluye una nueva etiqueta: runat=”server”. Éste es el código que ASP.NET utilizapara procesar sus páginas, y es donde debemos controlar toda la funcionalidad. Ese código también secompila a MSIL.

Línea verde (7)Iniciamos la página HTML. Éste es el contexto que será enviado al explorador Web (junto con todo lo queresulte del código ASP.NET).

Línea amarilla (8)Empieza con <%. A esto se le conoce como bloque proveedor de código. Contiene instrucciones adicionalesque ASP.NET utiliza para producir un resultado. En este caso, indica a ASP.NET que escriba “Pagina de ASP.NET”en el explorador Web. Los bloques proveedores de código no son compilados, y por ello no son tan eficientescomo los bloques de declaración de código. Los utilizaremos moderadamente.

Línea celeste claro (11)Tiene otro elemento HTML tradicional, pero nuevamente hay un runat=”server”. Cuando establecemos estaetiqueta, el formulario se convierte en un formulario Web. Todo lo que éste contenga puede ser vigilado porASP.NET.

Línea negra (11-13)Veremos algunos elementos nuevos que lucen como los de HTML, se conocen como controles Web. Confrecuencia funcionan de forma muy similar a los elementos HTML, pero con la funcionalidad agregada quepuede utilizar ASP.NET. Observamos que cada uno de estos elementos también tiene la línea runat=”server”.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 12: Módulo_11_Aplicaciones Web con ASP

12

Creación formulario Web

- Cuando creamos un formulario no hay una acción en éste.

- Tendríamos que especificar una acción para indicar al formulario HTML hacia dónde ir para procesarlos datos capturados por el usuario.

- Si no indicamos una acción, el formulario regresa así mismo. Esto se conoce como retorno delformulario. Podremos incluir cierto código ASP.NET para procesar lo capturado.

La palabra clave runat en la etiqueta <form>. Al establecer “server”, indicamos a ASP.NET que quiere llevarun control de este formulario en el servidor. Esta palabra clave vincula lo capturado por el visitante con loque el servidor piensa que ha ocurrido. Sin este atributo, el formulario fungirá como un formulario HTMLestándar.

Controles de servidor Web de ASP.Net

Los formularios en ASP.NET que establecen runat=”sever” se conocen como formularios Web, y son parte deun marco de trabajo que ASP.NET usa para dar una mayor funcionalidad a nuestras aplicaciones.

Los siguientes elementos son las etiquetas:

Éstos son controles de servidor Web de ASP.NET y cada uno de ellos tiene propiedades que nosotros podemosutilizar para dar funcionalidad a nuestra página.

Si observamos el código fuente de este archivo desde el explorador Web, veremos que losequivalentes HTML de estos controles son el cuadro de texto, el botón de envío y la etiqueta paraextender texto (<span>).

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 13: Módulo_11_Aplicaciones Web con ASP

13

Atributo Id de cada control

El atributo Id de cada control es un nombre único que damos al control de modo que podamos hacerreferencia a él desde otras partes de la página.

¿Qué es un evento?

Un evento es algo que ocurre en nuestra aplicación, como el clic del ratón o la modificación de una selección.

- El evento TextChanged sucede cuando se modifica el contenido delcuadro de texto.

- Al agregar OnTextChanged=”tbMensaje_Change”, hemos indicado aASP.NET que ejecute el procedimiento tbMensaje_Change al ocurrirel evento TextChanged.

- No obstante, a diferencia de las secuencias de comandos en elcliente, estos eventos se controlan en el servidor.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 14: Módulo_11_Aplicaciones Web con ASP

14

Estado visual

El estado visual indica el aspecto de un objeto. Por ejemplo, el estado visualde un cuadro de texto contiene el texto “Hola”, el estado visual de un botónindica si se ha oprimido o no.

Si llenamos un formulario de HTML y regresamos a él después, es posible quelos campos que hemos llenado estén vacíos.

Esto es porque Web es un medio sin estado, no nos permite llevar un control del estado visual u otrainformación similar. Esto ha sido un problema para los desarrolladores del ASP tradicional, dado quenecesitaban mecanismos para mantener y recuperar esta información.

Devolver campos ocultos de formulario HTML

ASP.NET hace esto al devolver campos ocultos de formulario HTML. Siempreque nosotros indiquemos runat=”server” en el formulario, recordamos elcampo oculto del código anterior.

Esa cadena de números aparentemente aleatorios es la forma en que ASP.NETse dice a sí mismo cómo luce cada control.

Cuando se envía el formulario, ASP.NET obtiene automáticamente esta cadena y la utiliza para llevarnuevamente la información del formulario. ASP.NET aprovecha el que los exploradores Web sólo puedencomprender HTML y agrega medios para recordar en las páginas que envía al cliente.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 15: Módulo_11_Aplicaciones Web con ASP

15

Envío de código HTML

Por ejemplo, veamos la siguiente línea escrita en el servidor

<form runat=”server”>

Esto envía el siguiente código HTML al explorador Web:

<form name=”ctr10” method=”post” action=”index.aspx” id=”ctr10”><input type=”hidden” name=”_VIEWSTATE” value=”dDwtMTM3NjQ2NjY2nt0pdDFSLEP3664…==”/>

La administración del estado visual es el vehículo central de ASP.NET para hacer que Web sea un entorno mástradicional para aplicaciones.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 16: Módulo_11_Aplicaciones Web con ASP

2. Creación de un proyecto Web ASP.Net

Crear un proyecto de servicio Web XML

Se pueden iniciar proyectos que incluyan los archivos necesarios para crear un servicio Web XML en VisualBasic o Visual C# utilizando las plantillas de proyecto que proporciona Visual Studio.

Para crear un proyecto de servicio Web XML, seguiremos los siguiente pasos:

- En el menú Archivo, elige Nuevo y, a continuación, hacer clic en Sitio Web.

- En el cuadro de diálogo Nuevo sitio Web, seleccionamos el icono Servicio Web ASP.NET.

- Insertamos la dirección de un servidor Web en el que podamos desarrollar el servicio Web XML. Porejemplo, utilizamos "http://MyServer/Application" o simplemente "http://MyServer" para crear elproyecto en el directorio raíz. También podemos crear el sitio en el sistema de archivos eligiendo unadirección de archivo, como "C:\Application."

- Haremos clic en Aceptar para crear el proyecto.

Visual Studio genera automáticamente los archivos y referencias necesarias para tener compatibilidad conun servicio Web XML. Cuando termina, el IDE muestra el archivo de código de servicio Web en vista de código.

Crear un proyecto ASP.Net

Antes de ejecutar los siguientes pasos, debemos tener el IIS instalado ycorriendo. Lo podemos poner en marcha desde "Panel de Control" ->"Herramientas Administrativas" -> "Internet Information Services".

Suponiendo que hemos instalado el Visual Studio .NET, lo abrimos y pulsamos sobre el botón de nuevoproyecto.

16

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 17: Módulo_11_Aplicaciones Web con ASP

17

Una vez con el IIS corriendo, seleccionamos "Visual C# Projects" -> ASP.NET Web Application y ponemos elnombre del proyecto que vamos a crear, en este ejemplo "WebEstiloEjemplos".

Creación de Web Form

Generada la aplicación ASP.NET, creamos un Web Form que es la base de cualquier página web .NET.

1. Primero crearemos un directorio dentro del proyecto para tener los ejemplos ordenados, eldirectorio lo llamaremos "ejem01". Para ello pulsaremos el botón derecho sobre el nombre deproyecto y seleccionaremos "Add" -> "New Folder".

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 18: Módulo_11_Aplicaciones Web con ASP

18

Añadir primer Web Form

2. Una vez creado el directorio "ejem01", pasamos a añadir nuestro primer Web Form. Seleccionamoscon el ratón el directorio "ejem01", pulsamos el botón derecho y seleccionaremos "Add" -> "AddWeb Form...", como se puede ver en la imagen.

Nombre del web form

3. Aparece un cuadro de diálogo en el que se nos preguntará el nombre del web form (página web),en este ejemplo le daremos "Ejemplo01.aspx".

La estructura de proyecto que nos tiene que quedar ha de ser ésta.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 19: Módulo_11_Aplicaciones Web con ASP

19

Añadir controles de servidor

4. Creado nuestro Web Form, ya podemos añadir controles de servidor, primero hacemos doble clicsobre el fichero "Ejemplo01.aspx". Nos aparecerá una página en blanco con una cuadrícula en la queañadiremos los controles.

5. Para añadir controles tan sólo hay que arrastrarlos desde la ventana "Toolbox" a al Web Form enblanco.

6. Añadiremos un "TextBox", una "Label" y un "Button“, y cambiaremos los nombres (Propiedades ->Atributo (ID) en negrita) por "txtNombre", "lblNombre" y "btnEnviar", respectivamente. Así mismocambiaremos la propiedad "Text" de "lblNombre" por "Su nombre es: ".

Se puede retocar un poco la página añadiendo algún otro elemento, para ello hacemos clic sobre la vista HTMLdel documento.

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 20: Módulo_11_Aplicaciones Web con ASP

Añadir título y retornos de carro

7. En este caso vamos a añadir un título <H1> y algunos retornos de carro <BR> y obtenemos algo comoesto:

<?@ Page language="c#" Codebehind="Ejemplo01.aspx.cs" AutoEventWireup="false"Inherits="WebEstiloEjemplos.ejem01.Ejemplo01" ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML>

<HEAD> <title>Ejemplo01</title> <meta content="Microsoft Visual Studio 7.0" name="GENERATOR"> <meta content="C#" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

</HEAD> <body MS_POSITIONING="GridLayout">

<form id="Ejemplo01" method="post" runat="server"> <h1>Ejemplo 01</h1> <asp:textbox id="txtNombre" runat="server"></asp:textbox><br> <asp:label id="lblNombre" runat="server">Su nombre es: </asp:label><br> <br> <asp:button id="btnEnviar" runat="server" Text="Button"></asp:button></form>

</body> </HTML>

20

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 21: Módulo_11_Aplicaciones Web con ASP

21

3. Resumen

Has llegado al final de esta lección de formación que denominamos “Creación de un proyecto Web ASP.Net”. En esta lección hemos estudiado los siguientes contenidos:

CREACIÓN DE UN PROYECTO WEB ASP.NET

Page 22: Módulo_11_Aplicaciones Web con ASP

FUNCIONAMIENTO DE UNA PÁGINA

ASP.NET Y SU CICLO DE VIDA

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 23: Módulo_11_Aplicaciones Web con ASP

Las páginas Web ASP.NET se usan como la interfaz de usuario programable para su aplicación Web. Este tipode páginas facilita la información al usuario en cualquier explorador o dispositivo cliente e implementalógica de aplicación mediante el código de la parte servidor.

Las páginas Web ASP.NET:

- Se basan en la tecnología Microsoft ASP.NET, en la que el código que se ejecuta en el servidor generade forma dinámica salida de páginas Web en un explorador o dispositivo cliente.

- Son compatibles con cualquier explorador o dispositivo móvil. Las páginas Web ASP.NET representanautomáticamente el código HTML adecuado al explorador para funciones tales como estilos, diseño,etc. También se pueden diseñar las páginas Web ASP.NET para ejecutarse en un exploradordeterminado, como Microsoft Internet Explorer 6 y aprovechar así todas las características de unexplorador específico.

- Admiten cualquier lenguaje compatible con Common Language Runtime de .NET, incluidosMicrosoft Visual Basic, Microsoft Visual C#, Microsoft J# y Microsoft JScript.NET.

- Se crean en el entorno Microsoft .NET Framework. Gracias a ello tenemos todos los beneficios delmarco de trabajo, incluidos un entorno administrado, seguridad de tipos y herencia.

- Son flexibles gracias a la posibilidad de incorporar a ellas controles creados por los usuarios y deotros fabricantes.

CICLO DE VIDA

Cuando se ejecuta una página ASP.NET, ésta recorre un ciclo de vida en el que realiza una serie de pasos deprocesamiento. Entre ellos se incluyen la inicialización, la creación de instancias de controles, la restauracióny el mantenimiento del estado, la ejecución del código del controlador de eventos y la representación. Esimportante que comprenda el ciclo de vida de la página para que pueda escribir código en la fase del ciclode vida apropiada y conseguir el efecto deseado.

APLICACIONES WEB CON ASP .NET

2

Page 24: Módulo_11_Aplicaciones Web con ASP

Además, si se crean controles personalizados, se debe estar familiarizado con el ciclo de vida de lapágina para poder inicializarlos, asignar datos de estado de vista a las propiedades de los controles yejecutar el código de comportamiento de éstos correctamente. (El ciclo de vida de un control está basadoen el ciclo de vida de la página, pero ésta produce en un control más eventos de los que están disponibles para la página ASP.NET por sí sola).

Etapas en el desarrollo de una página

En términos generales, la página recorre las fases descritas en la tabla siguiente. Además de las fases del ciclode vida de la página, existen las fases de la aplicación que se producen antes y después de una solicitud, perono son específicas de una página.

Solicitud de páginaLa solicitud de página se produce antes de que comience el ciclo de vida de la página. Cuando un usuariosolicita la página, ASP.NET determina si ésta se debe analizar y compilar (a fin de que comience el ciclo devida de la página) o si se puede enviar una versión en caché de la página como respuesta sin ejecutar lapágina.

InicioEn el paso de inicio, se establecen las propiedades de la página, como Request y Response. En esta fase, lapágina también determina si la solicitud es una devolución de datos o una nueva solicitud, y establece lapropiedad IsPostBack. Además, durante esta fase se establece la propiedad UICulture de la página.

Inicialización de páginaDurante la inicialización de la página, los controles incluidos en ella están disponibles y se establece lapropiedad UniqueID de cada uno de ellos. Además, se aplican los temas correspondientes a la página. Si lasolicitud actual es una devolución de datos, los datos de devolución aún no se han cargado y los valores delas propiedades del control no se han restaurado a los valores del estado de vista.

3

APLICACIONES WEB CON ASP .NET

Page 25: Módulo_11_Aplicaciones Web con ASP

CargaDurante la carga, si la solicitud actual es una devolución de datos, las propiedades del control se cargan coninformación recuperada del estado de vista y del estado del control.

ValidaciónDurante la validación, se llama al método Validate de todos los controles de validación, que establece lapropiedad IsValid de cada uno de los controles de validación y de la página.

Control de eventos de devolución de datosSi la solicitud es una devolución de datos, se llama a los controladores de eventos.

RepresentaciónAntes de representar los datos, se guarda el estado de vista de la página y de todos los controles. Durantela fase de representación, la página llama al método Render para cada control, proporcionando un escritorde texto que escribe su resultado en OutputStream de la propiedad Response de la página.

DescargaSe llama a la descarga cuando la página se ha representado completamente, se ha enviado al cliente y estálista para ser descartada. Llegado este momento, se descargan las propiedades de la página, como Responsey Request, y se llevan a cabo las operaciones de limpieza correspondientes.

Eventos del ciclo de vida

Dentro de cada fase del ciclo de vida de una página, ésta produce eventos que puede controlar para ejecutarsu propio código. En los eventos de control, el controlador de sucesos se debe enlazar al evento, bienmediante declaración utilizando atributos como onclick o bien en el código.

Las páginas también admiten la conexión automática de eventos, lo que significa que ASP.NET busca métodoscon nombres determinados y los ejecuta automáticamente cuando se provocan ciertos eventos. Si el atributoAutoEventWireup de la directiva @ Page se establece en true (o si no está definido, ya que de formapredeterminada es true), los eventos de página se enlazan de forma automática a los métodos que utilizanla convención de nomenclatura Page_evento, por ejemplo Page_Load y Page_Init..

En la tabla siguiente se muestran los eventos del ciclo de vida de la página que se utilizan con más frecuencia.Los utilizan fundamentalmente los controles de servidor de la página Web ASP.NET para sus propias tareasde inicialización y representación.

4

APLICACIONES WEB CON ASP .NET

Page 26: Módulo_11_Aplicaciones Web con ASP

Evento de página

PreInit - Utilice este evento para lo siguiente:

- Examine la propiedad IsPostBack para determinar si es la primera vez que se procesa la página.

- Crear o volver a crear controles dinámicos.

- Establecer una página maestra de forma dinámica.

- Establecer la propiedad Theme de forma dinámica.

- Leer o establecer los valores de las propiedades de perfil.

Init Se provoca cuanto todos los controles se han inicializado y se aplicado la configuración de máscara. Utiliceeste evento para leer o inicializar las propiedades del control.

InitComplete Lo provoca el objeto Page. Utilice este evento para tareas de procesamiento que requieran que todo elproceso de inicialización haya finalizado.

PreLoad Utilice este evento si necesita realizar tareas de procesamiento en su página o control antes de que seprovoque el evento Load.

Después de que Page provoca este evento, carga su estado de vista y el de todos los controles y, después,procesa todos los datos de devolución incluidos con la instancia de Request.

Load Page llama al método del evento OnLoad en Page, realiza la misma operación de forma recursiva para cadacontrol secundario, los cuales realizan la misma operación para cada uno de sus controles secundarios hastaque se cargan la página y todos los controles.

Utilice el método del evento OnLoad para establecer las propiedades de los controles y establecer lasconexiones a bases de datos.

Eventos de controlUtilice estos eventos para controlar eventos de control específicos, como un evento Click del control Buttono un evento TextChanged del control TextBox.

5

APLICACIONES WEB CON ASP .NET

Page 27: Módulo_11_Aplicaciones Web con ASP

LoadComplete Utilice este evento para las tareas que requieran que se carguen todos los demás controles en la página.

PreRender Antes de que se produzca este evento:

- El objeto Page llama a EnsureChildControls para cada control y para la página.

- Cada control enlazado a datos cuya propiedad DataSourceID esté establecida llama a su métodoDataBind. Para obtener más información, vea Eventos de enlace de datos de controles enlazados adatos más adelante.

El evento PreRender se produce para cada control de la página. Utilice el evento para realizar cambios finalesen el contenido de la página o en sus controles.

SaveStateComplete Antes de que se produzca este evento, ViewState se ha guardado para la página y para todos los controles.Se omitirán todos los cambios que se realicen en este momento en la página o en los controles.

Utilice este evento para realizar tareas que requieran guardar el estado de vista, pero que no efectúencambios en los controles.

Render Éste no es un evento; en esta fase del procesamiento, el objeto Page llama a este método en cada control.Todos los controles de servidor Web de ASP.NET tienen un método Render que escribe el marcado del controlque se envía al explorador.

Si crea un control personalizado, normalmente reemplazará este método para generar el marcado delcontrol. Sin embargo, si el control personalizado sólo incorpora controles de servidor Web de ASP.NETestándar y ningún marcado personalizado, no necesita reemplazar el método Render. Para obtener másinformación, consulte Desarrollar controles de servidor ASP.NET personalizados.

Un control de usuario (un archivo .ascx) incorpora automáticamente la representación, por lo que no necesitarepresentar explícitamente el control en el código.

Unload Este evento se produce para cada control y después para la página. En los controles, utilice este evento pararealizar tareas finales de limpieza en controles específicos, como cerrar las conexiones a bases de datosespecíficas del control.

Para la propia página, utilice este evento para hacer un último trabajo de limpieza, como cerrar archivosabiertos y conexiones a bases de datos, finalizar el registro u otras tareas específicas de la solicitud.

6

APLICACIONES WEB CON ASP .NET

Page 28: Módulo_11_Aplicaciones Web con ASP

Más aspectos sobre el ciclo de vida

Cada uno de los controles de servidor ASP.NET tiene su propio ciclo de vida, que es similar al ciclo de vidade la página. Por ejemplo, los eventos Init y Load de un control se producen durante los eventos de páginacorrespondientes.

Aunque los eventos Init y Load se producen de forma recursiva en cada control, lo hacen en orden inverso.El evento Init (y también el evento Unload) de cada control secundario se produce antes de que se provoqueel evento correspondiente para su contenedor (orden ascendente). Sin embargo, el evento Load de uncontenedor se produce antes de los eventos Load de sus controles secundarios (orden descendente).

Puede personalizar el aspecto o contenido de un control controlando los eventos de dicho control, como elevento Click del control Button y el evento SelectedIndexChanged del control ListBox. En determinadascircunstancias, también se pueden controlar los eventos DataBinding o Databound de un control..

Al heredar una clase de la clase Page, además de controlar los eventos provocados por la página, puedereemplazar los métodos de la clase base de la página. Por ejemplo, puede reemplazar el métodoInicializaCulture de la página para establecer dinámicamente una referencia cultural. Tenga en cuenta quecuando se crea un controlador de eventos con la sintaxis Page_evento, se llama a la implementación basede forma implícita y, por consiguiente, no es necesario llamarla de nuevo en el método. Por ejemplo, siemprese llama al método OnLoad de la clase de la página base, tanto si se crea un método Page_Load como si no.Sin embargo, si reemplaza el método OnLoad de la página por la palabra clave override (Overrides en VisualBasic), deberá llamar de forma explícita al método base. Por ejemplo, si reemplaza el método OnLoad dela página, deberá llamar a base.Load (MyBase.Load en Visual Basic) para poder ejecutar la implementaciónbase.

Eventos para controles agregados

Si los controles se crean dinámicamente en tiempo de ejecución o se crean mediante declaración dentro deplantillas de controles enlazados a datos, sus eventos no se sincronizan inicialmente con los de otros controlesde la página. Por ejemplo, en el caso de un control que se agrega en tiempo de ejecución, los eventos Inity Load se pueden producir mucho más tarde en el ciclo de vida de la página que los mismos eventos decontroles creados mediante declaración. Por consiguiente, desde el momento en que se crean sus instancias,los controles agregados dinámicamente y los controles en plantillas provocan sus eventos uno tras otro hastaque llegan al evento durante el cual se agregaron a la colección Controls.

Destacando especialmente lo anterior en los controles enlazados a datos anidados. Si un control secundariose ha enlazado a datos, pero no así su control contenedor, los datos del control secundario y los datos de sucontrol contenedor pueden no estar sincronizados. Esto ocurre especialmente si los datos del controlsecundario realizan el procesamiento en función del valor enlazado a datos del control contenedor.

7

APLICACIONES WEB CON ASP .NET

Page 29: Módulo_11_Aplicaciones Web con ASP

Suponga que tiene un GridView que muestra un registro de la empresa en cada fila junto con una lista delos empleados de la empresa en un control ListBox. Para rellenar la lista de empleados, enlaza el controlListBox a un control de origen de datos (como SqlDataSource) que recupera los datos de los empleados dela empresa utilizando el campo IdEmpresa en una consulta.

Si las propiedades de enlace de datos del control ListBox, como DataSourceID y DataMember, se establecenmediante declaración, el control ListBox intentará enlazar a su origen de datos durante el eventoDataBinding de la fila que lo contiene. Sin embargo, el campo IdEmpresa de la fila no contendrá un valorhasta que se produzca el evento RowDataBound del control GridView. En este caso, el control secundario(el control ListBox) se enlaza antes de que se enlace el control contenedor (el control GridView), por lo quesus fases de enlace a datos no estás sincronizadas.

Para evitar esta situación, coloque el control de origen de datos del control ListBox en el mismo elementode plantilla que el propio control ListBox y no establezca las propiedades de enlace de datos de ListBoxmediante declaración. En lugar de ello, establézcalas mediante programación en tiempo de ejecucióndurante el evento RowDataBound, para que el control ListBox no se enlace a sus datos hasta que lainformación de IdEmpresa esté disponible.

Eventos de enlace de datos de controles enlazados a datos

Para ayudarle a entender la relación que existe entre el ciclo de vida de la página y los eventos de enlacede datos, en la tabla siguiente se muestran los eventos relacionados con datos en controles enlazados adatos como los controles GridView, DetailsView y FormView

Evento de control

DataBinding Este evento lo provocan los controles enlazados a datos antes del evento PreRender del control contenedor(o del objeto Page) e indica el comienzo del enlace del control a los datos.

Utilice este evento para abrir manualmente conexiones a bases de datos, si es necesario. (Esta operaciónsuele ser innecesaria con los controles de origen de datos).

8

APLICACIONES WEB CON ASP .NET

Page 30: Módulo_11_Aplicaciones Web con ASP

RowCreated (sólo GridView) o ItemCreated (controles DataList, DetailsView, SiteMapPath, DataGrid, FormView y Repeater)Utilice este evento para manipular contenido que no dependa del enlace de datos. Por ejemplo, en tiempode ejecución, podría agregar formato mediante programación a una fila de encabezado o pie de página enun control GridView.

RowDataBound (sólo GridView) o ItemDataBound (controles DataList, SiteMapPath, DataGrid y Repeater)Cuando se produce este evento, los datos están disponibles en la fila o elemento, por lo que puede darformato a los datos o establecer la propiedad FilterExpression de los controles de origen de datos secundariospara mostrar datos relacionados dentro de la fila o elemento.

DataBound Este evento marca el fin de las operaciones de enlace de datos en un control enlazado a datos. En un controlGridView, el enlace de datos finaliza para todas las filas y todos los controles secundarios.

Utilice este evento para dar formato al contenido enlazado a datos o para iniciar el enlace de datos en otroscontroles que dependan de valores del contenido del control actual. (Para obtener información detallada,consulte “Poner eventos al día para controles agregados” anteriormente en este tema).

Eventos de control de inicio de sesión

El control Login puede utilizar la configuración del archivo Web.config para administrar automáticamente laautenticación de los miembros. Sin embargo, si su aplicación requiere que se personalice el modo defuncionamiento del control, o si desea entender cómo los eventos del control Login se relacionan con elciclo de vida de la página, puede utilizar los eventos mostrados en la tabla siguiente:

Evento de control

LoggingIn Este evento se provoca durante una devolución de datos, después de que se produzca el evento LoadCompletede la página. Marca el principio del proceso de inicio de sesión.

Utilice este evento para tareas que deban producirse antes de que comience el proceso de autenticación.

Authenticate Este evento se provoca después del evento LoggingIn.

Utilice este evento para reemplazar o mejorar el comportamiento de autenticación predeterminadode un control Login.

9

APLICACIONES WEB CON ASP .NET

Page 31: Módulo_11_Aplicaciones Web con ASP

LoggedIn Este evento se provoca una vez autenticado el nombre de usuario y la contraseña.

Utilice este evento para redirigir al usuario a otra página o para establecer dinámicamente el texto delcontrol. Este evento no se produce si hay un error o no es posible realizar la autenticación.

LoginError Este evento se provoca si la autenticación no tuvo éxito.

Utilice este evento para establecer texto en el control que explique el problema o para dirigir al usuario auna página diferente.

10

APLICACIONES WEB CON ASP .NET

Page 32: Módulo_11_Aplicaciones Web con ASP

PROGRAMACIÓN BASADA EN EVENTOS. FORMULARIOS WEB

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 33: Módulo_11_Aplicaciones Web con ASP

Características del modelo de programación de eventos.

Paradigma de programación en el que la estructura y ejecución del programa dependen de los sucesos(eventos) que ocurran en el sistema o que ellos mismos provoquen.

El programador debe definir los eventos a los cuales el programa reaccionará y las acciones que seguirá alpresentarse cada uno, esto se conoce como manejador de eventos.

Existen múltiples eventos y dependen del sistema operativo y del lenguaje de programación utilizado. Alejecutarse un programa así programado, se iniciará con el código correspondiente a su ejecución y luego elprograma esperará a que ocurra un evento. Al ocurrir este, se ejecutará el código correspondiente al eventoque se realizó.Los lenguajes visuales orientados al evento y con manejo de componentes dan al usuario que no cuenta conmucha experiencia en desarrollo, la posibilidad de construir sus propias aplicaciones utilizando interfacesgráficas sobre la base de ocurrencia de eventos.

Para soportar este tipo de desarrollo interactúan dos tipos de herramientas, una que permite realizar diseñosgráficos y , un lenguaje de alto nivel que permite codificar los eventos. Con dichas herramientas es posibledesarrollar cualquier tipo de aplicaciones basadas en el entorno.

Visual Basic es uno de los lenguajes de programación que más entusiasmo despiertan entre los programadoresde computadoras, tanto expertos como novatos. En el caso de los programadores expertos por la facilidadcon la que desarrollan aplicaciones complejas en poquísimo tiempo (comparado con lo que cuesta programaren Visual C++, por ejemplo). En el caso de los programadores novatos por el hecho de ver de lo que soncapaces a los pocos minutos de empezar su aprendizaje. El precio que hay que pagar por utilizar Visual Basices una menor velocidad o eficiencia en las aplicaciones.

Visual Basic es un lenguaje de programación visual, también llamado lenguaje de cuarta generación.

Así gran número de tareas se realizan sin escribir código, simplemente con operaciones gráficas realizadascon el ratón sobre la pantalla.Visual Basic es también un programa basado en objetos, aunque no orientado a objetos como Visual C++. Ladiferencia está en que Visual Basic utiliza objetos con propiedades y métodos, pero carece de los mecanismosde herencia y polimorfismo propios de los verdaderos lenguajes orientados a objetos como Java y C++.

Visual Basic es un buen ejemplo de programación orientada a eventos.

APLICACIONES WEB CON ASP .NET

2

Page 34: Módulo_11_Aplicaciones Web con ASP

Utilización de código gestionado.

El Código gestionado es el código de un programa que se ejecuta bajo la gestión de una máquina virtual (VM),a diferencia del código no gestionado, que es ejecutado directamente por la CPU del ordenador. Comoventajas del código gestionado destaca tanto las facilidades para el programador así como las garantías deseguridad. El término código gestionado es muy utilizado , aunque no exclusivo, en el mundo Microsoft. Loslenguajes más corrientes de Microsoft para crear código gestionado son C# y Visual Basic.NET

Los programas se pueden compilar en código gestionado o no gestionado. En la práctica, sin embargo, cadalenguaje de programación se compila en un tipo. Por ejemplo, el lenguaje de programación Java casi siemprese compila en código gestionado, aunque hay compiladores de Java que pueden generar código no gestionado(como el compilador GNU de Java).

Ejemplos históricos de código gestionado ejecutándose en una máquina virtual, son el UCSD Pascal queutilizaba p-code. Java popularizó esta aproximación con su Bytecode ejecutado por la Máquina virtual Java.Microsoft utiliza código gestionado en su máquina virtual CLR en el .NET Framework, u otras máquinasvirtuales similares.Algunos compiladores producen un "pseudocódigo" intermedio con la intención de compilarlo en códigomáquina y no para ejecutarlo en el interior de una máquina virtual como código gestionado (vea por ejemploBCPL o ALGOL 68C).

Formularios web

PRINCIPIOS DE DISEÑO DE UNA PÁGINA ASP.NET

Puede tener cualquier estructura de carpetas que desee para su aplicación. Para que sea más fácil trabajarcon su aplicación, ASP.NET reserva ciertos nombres de archivos y carpetas para tipos específicos decontenido.

Puede establecer las páginas predeterminadas para su aplicación.. Puede crear una página denominadaDefault.aspx y guardarla en la carpeta raíz del sitio. Cuando los usuarios llegan a su sitio sin especificar unapágina determinada (por ejemplo, http://www.contoso.com/) puede configurar su aplicación para que lapágina Default.aspx se solicite automáticamente. Puede utilizar una página predeterminada como páginaprincipal del sitio o puede escribir código en la página para redirigir a los usuarios a otras páginas.

3

APLICACIONES WEB CON ASP .NET

Page 35: Módulo_11_Aplicaciones Web con ASP

Carpetas de aplicación

ASP.NET reconoce ciertos nombres de carpeta que puede utilizar para determinados tipos de contenido. Enla tabla siguiente se muestran los nombres de carpeta reservados y el tipo de archivos que suelen contenerlas carpetas.

El contenido de las carpetas de aplicación, salvo para la carpeta App_Themes, no se sirve como repuesta alas solicitudes Web aunque se puede tener acceso a su contenido desde el código de la aplicación:

App_Browsers

Contiene definiciones del explorador (archivos .browser) que ASP.NET utiliza para identificar los exploradoresindividuales y determinar sus funciones. Para obtener más información, vea Esquema de archivos dedefinición de explorador (Elemento browsers) y Cómo: Detectar tipos de explorador en páginas Web ASP.NET.

App_Code

Contiene código fuente para clases de utilidad y objetos comerciales (por ejemplo, archivos .cs, .vb y .jsl)que debe compilar como parte de su aplicación. En una aplicación compilada de forma dinámica, ASP.NETcompila el código en la carpeta App_Code en la solicitud inicial de su aplicación. Los elementos de estacarpeta se vuelven a compilar cuando se detecta cualquier cambio.

En su aplicación se hace referencia automáticamente al código de la carpeta App_Code. Además, la carpetaApp_Code puede contener subdirectorios de archivos que necesitan ser compilados en tiempo de ejecución.Para obtener más información, vea Carpetas de código compartido en sitios Web ASP.NET y ElementocodeSubDirectories para compilation (Esquema de configuración de ASP.NET).

App_Data

Contiene los archivos de datos de aplicación incluso los archivos MDF, archivos XML, así como otros archivosde almacén de datos. ASP.NET 2.0 utiliza la carpeta App_Data para almacenar la base de datos local de unaaplicación, que se puede utilizar para mantener información sobre suscripciones y funciones. Para obtenermás información, vea Introducción a la suscripción y Descripción de la administración de funciones.

App_GlobalResources

Contiene recursos (archivos .resx y .resources) que se compilan en los ensamblados con ámbito global. Losrecursos en la carpeta App_GlobalResources tienen un establecimiento inflexible de tipos y se puede obteneracceso a ellos mediante programación. Para obtener más información, vea Información general sobrelos recursos de las páginas Web ASP.NET.

4

APLICACIONES WEB CON ASP .NET

Page 36: Módulo_11_Aplicaciones Web con ASP

App_LocalResources

Contiene recursos (archivos .resx y .resources) que están asociados con una página específica, control deusuario o página principal en una aplicación. Para obtener más información, vea Información general sobrelos recursos de las páginas Web ASP.NET.

App_Themes

Contiene una colección de archivos (archivos .skin y .css, así como archivos de imagen y recursos genéricos)que definen el aspecto de las páginas Web y controles ASP.NET. Para obtener más información, veaInformación general sobre temas y máscaras de ASP.NET.

App_WebReferences

Contiene archivos de contrato de referencia (archivos .wsdl), esquemas (archivos .xsd) y archivos dedocumentos de descubrimiento (archivos .disco y .discomap) que definen una referencia Web para utilizarlaen una aplicación. Para obtener más información sobre el código generador para los servicios Web XML, veaHerramienta Lenguaje de descripción de servicios Web (Wsdl.exe).

Bin

Contiene ensamblados compilados (archivos .dll) para los controles, componentes u otro código al que deseahacer referencia en su aplicación. En su aplicación se hace referencia automáticamente a cualquier claserepresentada por código de la carpeta Bin. Para obtener más información, vea Carpetas de código compartidoen sitios Web ASP.NET.

Administrar subcarpetas

La configuración de un sitio se administra en un archivo Web.config que se encuentra en la carpeta raíz delsitio. Si tiene archivos en subcarpetas, puede mantener opciones de configuración independientes para esosarchivos si crea un archivo Web.config en esa carpeta.

Restringir el acceso al contenido del sitio

Como parte de la configuración del sitio, puede configurar opciones que restrinjan el acceso a archivos osubcarpetas individuales. Puede restringir el contenido por individuos o por funciones (grupos).

5

APLICACIONES WEB CON ASP .NET

Page 37: Módulo_11_Aplicaciones Web con ASP

Propiedades y eventos de la clase Page.

AdapterObtiene el adaptador específico del explorador para el control. (Se hereda de Control).

ApplicationObtiene el objeto HttpApplicationState de la solicitud Web actual.

AppRelativeTemplateSourceDirectoryObtiene o establece el directorio virtual relativo a la aplicación del objeto Page o el objeto UserControl quecontiene este control. (Se hereda de Control).

AppRelativeVirtualPathObtiene o establece la ruta de acceso del directorio virtual, relativa a la aplicación, al archivo desde el cualse analiza y se compila el control. (Se hereda de TemplateControl).

AspCompatModeInfraestructura. Establece un valor que indica si la página se puede ejecutar en un subproceso de unapartamento de un único subproceso (STA).

AsyncModeInfraestructura. Establece un valor que indica si se procesa la página sincrónica o asincrónicamente.

AsyncTimeoutInfraestructura. Obtiene o establece un valor que indica el intervalo de tiempo de espera utilizado al procesartareas asincrónicas.

AutoHandlersInfraestructura. Obsoleto. La propiedad AutoHandlers ha dejado de utilizarse en ASP.NET 2.0. Se utiliza porlas clases generadas y no está pensada para ser utilizada dentro del código. (Se hereda de TemplateControl).

AutoPostBackControlObtiene o establece el control de la página que se usa para realizar las devoluciones de datos.

BindingContainerInfraestructura. Obtiene el control que contiene el enlace de datos de este control. (Se hereda de Control).

BufferInfraestructura. Establece un valor que indica si el resultado de la página se va a almacenar en un búfer.

6

APLICACIONES WEB CON ASP .NET

Page 38: Módulo_11_Aplicaciones Web con ASP

CacheObtiene el objeto Cache que está asociado a la aplicación en que reside la página.

ChildControlsCreatedObtiene un valor que indica si se han creado controles secundarios del control de servidor. (Se hereda deControl).

ClientIDObtiene el identificador del control de servidor generado por ASP.NET. (Se hereda de Control).

ClientIDSeparatorObtiene un valor de carácter que representa el carácter separado utilizado en la propiedad ClientID. (Sehereda de Control).

ClientQueryStringObtiene la parte de la cadena de consulta de la dirección URL solicitada.

ClientScriptObtiene un objeto ClientScriptManager que se utiliza para administrar, registrar y agregar script a la página.

ClientTargetObtiene o establece un valor que permite reemplazar la detección automática de las funciones del exploradory especificar cómo se representa una página para clientes de explorador concretos.

CodePageInfraestructura. Establece el identificador de la página de códigos para el Page actual.

ContentTypeInfraestructura. Establece el tipo MIME HTTP para el objeto HttpResponse asociado a la página.

ContextObtiene el objeto HttpContext asociado a la página. (Invalida a Control..::.Context).

ControlsObtiene un objeto ControlCollection que representa los controles secundarios para un control de servidorespecificado en la jerarquía de la interfaz de usuario. (Se hereda de Control).

CultureInfraestructura. Establece el id. de referencia cultural del objeto Thread asociado a la página.

7

APLICACIONES WEB CON ASP .NET

Page 39: Módulo_11_Aplicaciones Web con ASP

DesignModeObtiene un valor que indica si se está utilizando un control en una superficie de diseño. (Se hereda deControl).

EnableEventValidationObtiene o establece un valor que indica si la página valida la devolución de datos y eventos de devoluciónde llamada.

EnableThemingObtiene o establece un valor booleano que indica si los temas se aplican al control que deriva de la claseTemplateControl. (Se hereda de TemplateControl).

EnableViewStateObtiene o establece un valor que indica si la página debe mantener su estado de vista y el de los controlesde servidor que contenga cuando finalice la solicitud de página actual. (Invalida aControl..::.EnableViewState).

EnableViewStateMacObtiene o establece un valor que indica si ASP.NET debe ejecutar una comprobación de la autenticación demensajes (MAC) en el estado de vista de la página cuando la página se devuelva desde el cliente.

ErrorPageObtiene o establece la página de errores a la que se redirige el explorador que realiza la solicitud si seproduce una excepción de página no controlada.

EventsObtiene una lista de delegados de controladores de eventos del control. Esta propiedad es de sólo lectura.(Se hereda de Control).

FileDependenciesInfraestructura. Obsoleto. Establece una matriz de archivos de la que depende el objeto HttpResponse actual.

FormObtiene el formulario HTML de la página.

HasChildViewStateObtiene un valor que indica si los controles secundarios del control de servidor actual tienen guardada algunaconfiguración del estado de vista. (Se hereda de Control).

8

APLICACIONES WEB CON ASP .NET

Page 40: Módulo_11_Aplicaciones Web con ASP

HeaderObtiene el encabezado de documento de la página si el elemento head está definido con runat=server en ladeclaración de la página.

IDObtiene o establece un identificador para una instancia determinada de la clase Page. (Invalida aControl..::.ID).

IdSeparatorInfraestructura. Obtiene el carácter utilizado para separar los identificadores de control al construir unidentificador único para un control de una página.

IsAsyncObtiene un valor que indica si la página se va a procesar de manera asincrónica.

IsCallbackObtiene un valor que indica si la solicitud de la página es el resultado de una devolución de llamada.

IsChildControlStateClearedObtiene un valor que indica si los controles que se encuentran en este control tienen estado de control. (Sehereda de Control).

IsCrossPagePostBackObtiene un valor que indica si la página participa en una devolución de datos entre páginas.

IsPostBackObtiene un valor que indica si la página se está cargando como respuesta a un valor devuelto por el cliente,o si es la primera vez que se carga y se obtiene acceso a la misma.

IsPostBackEventControlRegisteredObtiene un valor que indica si se ha registrado el control de la página que realiza las devoluciones de datos.

IsReusableInfraestructura. Obtiene un valor que indica si puede reutilizarse el objeto Page.

IsTrackingViewStateObtiene un valor que indica si el control de servidor está guardando los cambios realizados en su estado devista. (Se hereda de Control).

9

APLICACIONES WEB CON ASP .NET

Page 41: Módulo_11_Aplicaciones Web con ASP

IsValidObtiene un valor que indica si la validación de la página ha sido correcta.

IsViewStateEnabledObtiene un valor que indica si el estado de vista está habilitado para este control. (Se hereda de Control).

ItemsObtiene una lista de objetos almacenados en el contexto de la página.

LCIDInfraestructura. Establece el identificador de configuración regional del objeto Thread asociado a la página.

LoadViewStateByIDObtiene un valor que indica si el control participa en la carga de su estado de vista mediante ID en lugar deíndice. (Se hereda de Control).

MaintainScrollPositionOnPostBackObtiene o establece un valor que indica si el usuario regresará a la misma posición del explorador clientedespués de la devolución de datos. Esta propiedad reemplaza la propiedad SmartNavigation obsoleta.

MasterObtiene la página principal que determina la apariencia general de la página.

MasterPageFileObtiene o establece el nombre de la página principal.

MaxPageStateFieldLengthObtiene o establece la longitud máxima del campo de estado de la página.

NamingContainerObtiene una referencia al contenedor de nombres del control de servidor, que crea un espacio de nombresúnico para diferenciar los distintos controles de servidor que tienen el mismo valor para la propiedadControl..::.ID. (Se hereda de Control).

PageObtiene una referencia a la instancia Page que contiene el control de servidor. (Se hereda de Control).

10

APLICACIONES WEB CON ASP .NET

Page 42: Módulo_11_Aplicaciones Web con ASP

PageAdapterObtiene el adaptador que representa la página del explorador específico que realizó la solicitud.

PageStatePersisterObtiene el objeto PageStatePersister asociado a la página.

ParentObtiene una referencia al control principal del control de servidor en la jerarquía de controles de página.(Se hereda de Control).

PreviousPageObtiene la página que transfirió el control a la página actual.

RequestObtiene el objeto HttpRequest para la página solicitada.

ResponseObtiene el objeto HttpResponse asociado al objeto Page. Este objeto permite enviar datos de respuestaHTTP a un cliente y contiene información sobre esa respuesta.

ResponseEncodingInfraestructura. Establece el lenguaje de codificación del objeto HttpResponse actual.

ServerObtiene el objeto Server, que es una instancia de la clase HttpServerUtility.

SessionObtiene el objeto Session actual proporcionado por ASP.NET.

SiteObtiene información sobre el contenedor en que se encuentra el control actual cuando se representa en unasuperficie de diseño. (Se hereda de Control).

SkinIDObtiene o establece la máscara que se debe aplicar al control. (Se hereda de Control).

SmartNavigationObsoleto. Obtiene o establece un valor que indica si las navegaciones inteligentes están habilitadas. Estapropiedad está obsoleta.

11

APLICACIONES WEB CON ASP .NET

Page 43: Módulo_11_Aplicaciones Web con ASP

StyleSheetThemeObtiene o establece el nombre de la hoja de estilos aplicada a esta página.

SupportAutoEventsInfraestructura. Obtiene un valor que indica si el control TemplateControl admite eventos automáticos. (Sehereda de TemplateControl).

TemplateControlObtiene o establece una referencia a la plantilla que contiene este control. (Se hereda de Control).

TemplateSourceDirectoryObtiene el directorio virtual de Page o UserControl que contiene el control de servidor actual. (Se hereda deControl).

ThemeObtiene o establece el nombre del tema de la página.

TitleObtiene o establece el título de la página.

TraceObtiene el objeto TraceContext de la solicitud Web actual.

TraceEnabledInfraestructura. Establece un valor que indica si se habilita el seguimiento para el objeto Page.

TraceModeValueInfraestructura. Establece el modo en que se muestran las instrucciones de seguimiento en la página.

TransactionModeInfraestructura. Establece el nivel de compatibilidad con transacciones para la página.

UICultureInfraestructura. Establece el id. de interfaz de usuario (UI) para el objeto Thread asociado a la página.

UniqueFilePathSuffixObtiene un sufijo único que se anexa a la ruta de acceso de archivo para los exploradores conalmacenamiento en caché.

12

APLICACIONES WEB CON ASP .NET

Page 44: Módulo_11_Aplicaciones Web con ASP

UniqueIDObtiene el identificador cualificado jerárquicamente para el control de servidor. (Se hereda de Control).

UserObtiene información sobre el usuario que realiza la solicitud de página.

ValidatorsObtiene una colección de todos los controles de validación que contiene la página solicitada.

ViewStateObtiene un diccionario con información de estado que le permite guardar y restaurar el estado de vista deun control de servidor en las distintas solicitudes de la misma página. (Se hereda de Control).

ViewStateEncryptionModeObtiene o establece el modo del cifrado del estado de vista.

ViewStateIgnoresCaseObtiene un valor que indica si el objeto StateBag no distingue mayúsculas de minúsculas. (Se hereda deControl).

ViewStateUserKeyAsigna un identificador a un usuario individual en la variable de estado de vista asociada a la página actual.

VisibleObtiene o establece un valor que indica si se representa el objeto Page. (Invalida a Control..::.Visible).

Implementaciones explícitas de interfaces

IControlBuilderAccessor..::.ControlBuilderPara obtener una descripción de este miembro, vea IControlBuilderAccessor..::.ControlBuilder. (Se hereda deControl).

IDataBindingsAccessor..::.DataBindingsPara obtener una descripción de este miembro, vea IDataBindingsAccessor..::.DataBindings. (Se hereda deControl).

IExpressionsAccessor..::.ExpressionsPara obtener una descripción de este miembro, vea IExpressionsAccessor..::.Expressions. (Se hereda deControl).

13

APLICACIONES WEB CON ASP .NET

Page 45: Módulo_11_Aplicaciones Web con ASP

IDataBindingsAccessor..::.HasDataBindingsPara obtener una descripción de este miembro, vea IDataBindingsAccessor..::.HasDataBindings. (Se heredade Control).

IExpressionsAccessor..::.HasExpressionsPara obtener una descripción de este miembro, vea IExpressionsAccessor..::.HasExpressions. (Se hereda deControl).

IControlDesignerAccessor..::.UserDataPara obtener una descripción de este miembro, vea IControlDesignerAccessor..::.UserData. (Se hereda deControl).

Eventos públicos

AbortTransaction Se produce cuando un usuario finaliza una transacción. (Se hereda de TemplateControl).

CommitTransaction Se produce cuando finaliza una transacción. (Se hereda de TemplateControl).

DataBinding Se produce cuando el control de servidor se enlaza a un origen de datos. (Se hereda de Control).

Disposed Se produce cuando un control de servidor se libera de la memoria, lo que constituye la última fase del períodode duración de un control de servidor cuando se solicita una página ASP.NET. (Se hereda de Control).

Error Se produce cuando se produce una excepción no controlada. (Se hereda de TemplateControl).

Init Tiene lugar al inicializar el control de servidor, que es el primer paso en su ciclo de vida. (Se hereda deControl).

InitComplete Se produce cuando se completa la inicialización de la página.

14

APLICACIONES WEB CON ASP .NET

Page 46: Módulo_11_Aplicaciones Web con ASP

Load Se produce cuando el control de servidor se carga en el objeto Page. (Se hereda de Control).

LoadComplete Se produce al final de la fase de carga del ciclo de vida de la página.

PreInit Se produce al principio de la inicialización de la página.

PreLoad Se produce antes del evento Load de la página.

PreRender Se produce una vez que se carga el objeto Control, pero antes de su representación. (Se hereda de Control).

PreRenderComplete Se produce antes de que se represente el contenido de la página.

SaveStateComplete Se produce después de que la página ha terminado de guardar toda la información de estado de vista y estadode control para la página y los controles de la página.

Unload Se produce cuando el control de servidor se descarga de la memoria. (Se hereda de Control).

Directivas de una página ASP.NET

Las directivas especifican los valores que utilizará la página y los compiladores de controles de usuario cuandoprocesan páginas de formularios Web Forms ASP.NET (.aspx) y archivos de controles de usuario (.ascx).ASP.NET trata todos los bloques de directivas (<%@ %>) que no contienen nombres explícitos de directivascomo directivas @ Page (para páginas) o como directivas @ Control (para controles de usuario).

@ AssemblyVincula de forma declarativa un ensamblado a la página o control de usuario actuales.

@ ControlDefine atributos específicos del control utilizados por el analizador y compilador de páginas ASP.NET y sólose puede incluir en archivos .ascx (controles de usuario).

15

APLICACIONES WEB CON ASP .NET

Page 47: Módulo_11_Aplicaciones Web con ASP

@ ImplementsIndica de forma declarativa que en una página o control de usuario se implementa la interfaz de .NETFramework especificada.

@ ImportImporta un espacio de nombres en una página o un control de usuario explícitamente.

@ MasterIdentifica una página como página principal y define los atributos utilizados por el analizador y compiladorde páginas ASP.NET; sólo se puede incluir en archivos .master.

@ MasterTypeDefine la clase o ruta de acceso virtual utilizada para escribir la propiedad Master de una página.

@ OutputCacheControla de forma declarativa las directivas de almacenamiento en la caché de resultados de una página ocontrol de usuario.

@ PageDefine atributos específicos de la página utilizados por el analizador y compilador de páginas ASP.NET; sólose puede incluir en archivos .aspx.

@ PreviousPageTypeCrea una referencia con establecimiento inflexible de tipos a la página de origen a partir del destino de unapublicación en varias páginas.

@ ReferenceVincula mediante declaración una página, un control de usuario o un control COM a la página o control deusuario actuales.

@ RegisterAsocia alias a espacios de nombres y clases, lo que permite la representación de controles de usuario ycontroles de servidor personalizados cuando se incluyen en una página o un control de usuario solicitados.

16

APLICACIONES WEB CON ASP .NET

Page 48: Módulo_11_Aplicaciones Web con ASP

CONTROLES CON HTML

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 49: Módulo_11_Aplicaciones Web con ASP

ÍNDICE

CONTROLES HTML

1. Comportamiento de un control HTML en una página ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Funcionamiento como control de servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

3. Estudios de los principales controles HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11

Page 50: Módulo_11_Aplicaciones Web con ASP

1. Comportamiento de un control HTML en una página ASP.NET

Objetivo y Estructura de la lección

1. Conocer cuál es el comportamiento de un control HTML en unapágina ASP.Net.

2. Conocer el funcionamiento como control de servidor.3. Conocer cómo es el estudio de los principales controles HTML.

Controles de servidor (CS)

Las páginas ASP.NET pueden contener controles de servidor (CS), que son objetos programables del lado delservidor que usualmente representan un elemento UI en la página (textbox o una imagen).

Ventaja

Su ventaja más destacable es que permiten a los desarrolladores obtener uncomportamiento y un renderizado complejo a partir de componentessencillos, reduciendo así la cantidad de código necesario para crear unapágina Web dinámica.

Además no olvidemos su facilidad para personalizar su comportamiento orenderizado.

Propiedades del servidor CS

Veamos algunas propiedades del servidor CS:

- Los CS muestran propiedades que pueden ajustarse bien de forma declarativa (en la etiqueta) o biende forma programada (con código).

- Los CS (y la página en sí) también tienen eventos que los desarrolladores pueden controlar pararealizar acciones específicas durante la ejecución de la página, o en respuesta a una accióndel lado del cliente que envíe la página al servidor (un "postback").

CONTROLES HTML

3

Page 51: Módulo_11_Aplicaciones Web con ASP

CONTROLES HTML

4

- Los CS simplifican el problema de mantener el estado del servidor,manteniendo sus valores de forma automática en sucesivospostbacks.

- Los CS se declaran en un fichero .aspx mediante etiquetas propias oetiquetas HTML intrínsecas que contienen el atributo runat="server".

Las etiquetas HTML intrínsecas son manejadas con uno de los controles del "namespace"System.Web.UI.HtmlControls. A cualquier etiqueta que no corresponda a uno de los controles se le asigna eltipo System.Web.UI.HtmlControls.HtmlGenericControl.

Ejemplo de CS

El siguiente ejemplo utiliza cuatro CS - controles de servidor - :

En tiempo de ejecución estos controles de servidor generan de forma automática el contenido HTML.

<html><head>

<link rel="stylesheet"href="intro.css"></head><body>

<center><form action="intro4_vb.aspx" method="post" runat=server>

<h3> Name: <asp:textbox id="Name" runat="server"/>Category: <asp:dropdownlist id="Category" runat=server>

<asp:listitem >psychology</asp:listitem><asp:listitem >business</asp:listitem><asp:listitem >popular_comp</asp:listitem>

</asp:dropdownlist></h3><asp:button text="Lookup" runat="server"/>

</form></center>

</body></html>

Page 52: Módulo_11_Aplicaciones Web con ASP

Nota: Los controles de servidor mantienen de forma automática entre viajes al servidor cualquier valorinsertado en el lado del cliente. Este estado del control no se almacena en el servidor (en lugar de eso sealmacena en un campo <input type="hidden“> de formulario que se envía y devuelve en las diferentespeticiones). No es necesario ningún script del lado del cliente.

ASP.NET permite a los desarrolladores utilizar controles personalizados. El control <asp:adrotator> se puedeutilizar para mostrar dinámicamente "ads" cambiantes en la página.

Utilización de controles personalizados

ASP.NET permite a los desarrolladores utilizar controles personalizados. El control <asp:adrotator> se puedeutilizar para mostrar dinámicamente "ads" cambiantes en la página.

<html><head>

<link rel="stylesheet"href="intro.css"></head><body>

<center><form action="intro5_vb.aspx" method="post" runat="server">

<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/><h3> Name: <asp:textbox id="Name" runat="server"/>Category: <asp:dropdownlist id="Category" runat=server>

<asp:listitem >psychology</asp:listitem><asp:listitem >business</asp:listitem><asp:listitem >popular_comp</asp:listitem>

</asp:dropdownlist></h3><asp:button text="Lookup" runat="server"/>

</form></center>

</body></html>

CONTROLES HTML

5

Page 53: Módulo_11_Aplicaciones Web con ASP

2. Funcionamiento como control de servidor

Cómo controlar el evento OnClick

Cada CS de ASP.NET es capaz de mostrar un modelo de objeto conteniendo propiedades, métodos y eventos.Los desarrolladores de ASP.NET utilizan este modelo de objeto para modificar e interactuar con la página.

Cómo controlar el evento OnClick del control <asp:button runat=server> control para manipular la propiedadText del control <asp:label runat=server>.

<html><head>

<link rel="stylesheet"href="intro.css"></head><script language="VB" runat=server>

Sub SubmitBtn_Click(Sender As Object, E As EventArgs)Message.Text = "Hi " & HttpUtility.HtmlEncode(Name.Text) & ", you selected: " &

Category.SelectedItem.TextEnd Sub

</script><body>

<center><form action="intro6_vb.aspx" method="post" runat="server">

<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/><h3> Name: <asp:textbox id="Name" runat="server"/>Category: <asp:dropdownlist id="Category" runat=server>

<asp:listitem >psychology</asp:listitem><asp:listitem >business</asp:listitem><asp:listitem >popular_comp</asp:listitem>

</asp:dropdownlist></h3><asp:button text="Lookup" OnClick="SubmitBtn_Click" runat="server"/><p><asp:label id="Message" runat="server"/>

</form></center>

</body></html>

CONTROLES HTML

6

Page 54: Módulo_11_Aplicaciones Web con ASP

CONTROLES HTML

7

Eventos a nivel de página

El ejemplo anterior es análogo al ejemplo "Intro3" mostrado anteriormente. En ésta, no obstante, hay mayorlimpieza y simplicidad del código en la versión basada en controles de servidor.

El Framework de páginas ASP.NET también muestra gran variedad de eventos a nivel de página, que podemoscontrolar para escribir código que se ejecute en un momento determinado durante el procesado de la página.Ejemplos de estos eventos son Page_Load y Page_Render.

Page 55: Módulo_11_Aplicaciones Web con ASP

3. Estudios de los principales controles HTML

Páginas Web ASP.Net

Los CS Web ASP.NET son objetos de páginas Web ASP.NET que se ejecutancuando se solicita la página y que representan marcado en un explorador.

Muchos CS web son similares a elementos HTML conocidos, como botones ycuadros de texto. Otros son más complejos (controles de calendario ycontroles que administran las conexiones de datos).

Tipos de controles

Usuario, servidor y de elementos Web:

Nº1Además de utilizar CS Web en las páginas Web ASP.NET, podemos crearnuestros propios controles personalizados reutilizables con las mismastécnicas que para crear páginas Web ASP.NET. Estos controles se denominancontroles de usuario (CU).

Un CU es un tipo de control compuesto que funciona de forma similar a la deuna página Web ASP.NET: se pueden agregar controles de servidor Web ymarcado a un control de usuario, así como definir propiedades y métodospara el control. Después puede incrustarlos en páginas Web ASP.NET, dondeactúan como una unidad.

Nº2Los CS Web ASP.NET son objetos de páginas web ASP.NET que se ejecutan cuando se solicita la página.Bastantes CS Web son similares a los conocidos elementos HTML (botones y cuadros de texto), otros tienenun comportamiento complejo, como los controles de un calendario, y controles que pueden usarse paraconectar a datos y datos de visualización.

ASP.NET proporciona CS habilitados para AJAX. Estos controles están compuestos por código de servidor yde cliente que se integra para generar un comportamiento de cliente enriquecido. Cuando se agrega uncontrol AJAX a una página web ASP.NET, la página envía automáticamente el script de cliente de soporte alexplorador para la funcionalidad de AJAX. Se puede personalizar la funcionalidad de un control, pero no esnecesario

CONTROLES HTML

8

Page 56: Módulo_11_Aplicaciones Web con ASP

Nº3Los controles de los elementos Web ASP.NET son un conjunto integrado decontroles concebidos para crear sitios Web que permiten al usuario modificarel contenido, el aspecto y el comportamiento de las páginas Webdirectamente en un explorador.

Nº4Los controles de servidor Web ASP.NET son objetos de páginas Web ASP.NETque se ejecutan cuando se solicita la página y representan el formato en unexplorador.

Control de división HTML

En la ficha HTML del Cuadro de herramientas, está disponible un controlbasado en el elemento DIV HTML como el control Div.

Los CS HTML agregados desde el cuadro de herramientas a una página enVisual Studio son elementos HTML con algunos atributos ya establecidos.

También se pueden crear elementos HTML en la vista Código fuente mediante la escritura de código deformato.

El servidor no tiene acceso a los elementos HTML de una página deformularios Web Forms; se tratan como código de formato que se pasan alexplorador. Si se agrega un atributo Id y el atributo runat="server", ASP.NETreconoce los elementos como control en la página y se puede programarmediante código basado en servidor. Si se convierte un elemento DIV HTMLen un control de servidor ASP.NET, se crea como instancia de la clase HTMLGENERIC CONTROL.

CONTROLES HTML

9

Page 57: Módulo_11_Aplicaciones Web con ASP

Controles de regla horizontal HTML

En la ficha HTML del Cuadro de herramientas, está disponible un controlbasado en el elemento HR HTML como el control Horizontal Rule.

Los CS HTML agregados desde el Cuadro de herramientas a una página enVisual Studio son elementos HTML con algunos atributos ya establecidos.También se pueden crear elementos HTML en la vista Código fuente mediantela escritura de código de formato.

Por defecto, el servidor no tiene acceso a los elementos HTML de una página de formularios Web Forms; setratan como código de formato que se pasa al explorador. Sin embargo, si se agrega un atributo Id y elatributo runat="server", ASP.NET reconoce los elementos como control en la página y se puede programarmediante código basado en servidor. Si se convierte un elemento HR HTML en un control de servidor ASP.NET,se crea como instancia de la clase HTML GENERIC CONTROL.

CONTROLES HTML

10

Page 58: Módulo_11_Aplicaciones Web con ASP

CONTROLES HTML

11

4. Resumen

Has llegado al final de esta lección de formación que denominamos “Controles HTML”.En esta lección hemos estudiado los siguientes contenidos:

Page 59: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 60: Módulo_11_Aplicaciones Web con ASP

1. Comportamiento de un control Web en una página ASP.NET.

CONTROLES PERSONALIZADOS

ASP.NET nos permite generar controles personalizados.

Los controles personalizados (CP) no son controles de usuario. En lugarde encapsular cierta funcionalidad de la interfaz de usuario, loscontroles personalizados pueden definir su comportamientototalmente original.

Los controles de usuario (CU) se utilizan cuando deseamos combinarla funcionalidad de controles existentes, los controles personalizadosse utilizan cuando ninguno de los controles existentes cumple connuestras necesidades.

El marco de trabajo de los formularios Web nos permite extender la biblioteca de controles con nuestrospropios controles. Éstos pueden ser totalmente originales o extender el comportamiento de un controlexistente

Todos los objetos en el marco de trabajo de los formularios Web derivan directa o indirectamente de la claseSystem.Web.UI.Control. Esta clase ofrece los métodos y propiedades básicos de todos los controles, como ID,GetType y ToString.

En los formularios Web nos permite insertar un control personalizado en cualquier parte, siempre y cuandose derive de alguna manera de la clase Control. Se puede ampliar la funcionalidad existente, o tan sólogenerar mecanismos que residan en uno de los espacios de nombres básicos de Web.

CÓMO GENERAR CONTROLES PERSONALIZADOS

Vamos a generar un control personalizado.

APLICACIONES WEB CON ASP.NET

2

Page 61: Módulo_11_Aplicaciones Web con ASP

Esto es un archivo fuente de VB.NET y no una página ASP.NET. Por ello, tendremos que importar los espaciosde nombres que serán importados automáticamente a los archivos .aspx.

Render es el método que permite a los controles existentes mostrar controles de servidor a partir de la claseControl.

Para que nuestro control personalizado muestre HTML en el explorador Web, debemos ofrecer unaimplementación de este método. Como este método ya existe en la clase Control, hay que sustituirlo conla palabra clave Overrides.

El método Render toma un parámetro, un objeto HtmlTextWriter llamado Output. Este objeto ofrece todoslos métodos necesarios para ayudar al método Render a producir salida HTML. Lo usaremos para producir unresultado en nuestro control personalizado, usando el método Write de la variable Output para enviar HTMLal explorador Web.

USO DE LOS CONTROLES PERSONALIZADOS

Generado y compilado el control personalizado, podemos implementarlo en cualquier página, como con uncontrol de usuario. Hay que utilizar la directiva @ Register pero en esta ocasión la sintaxis será un pocodistinta.

<%@ Register TagPrefix=”ici”Namespace=”MiControlPersonalizado” Assembly=”ControlPersonalizado”%>

La propiedad TagPrefix es la misma que con los controles de usuario. Pero TagName y src han sidoreemplazados por los atributos Namespace y Assembly. Namespace es tan sólo el espacio de nombres en elque se generó el control personalizado. El atributo Assembly establece el archivo fuente compilado.

USO DE LAS PROPIEDADES Y EL ESTADO

Como cualquier otro control de servidor, podemos incluirle propiedades, métodos y eventos, participar enenvíos del formulario, e, incluso, mantener el estado.

Para agregar una propiedad a nuestro control, tan sólo declaramos una variable pública o un elementoProperty en la clase de nuestro control personalizado.

APLICACIONES WEB CON ASP.NET

3

Page 62: Módulo_11_Aplicaciones Web con ASP

Si deseamos que el control mantenga el estado, tan sólo tendremos que agregar los elementos al saco deestado “ViewState” .

ViewState(“datoGuardar”) = valor

APLICACIONES WEB CON ASP.NET

4

Page 63: Módulo_11_Aplicaciones Web con ASP

2. Programación de eventos en controles Web.

CÓMO AGREGAR EVENTOS

Los CS reaccionan a las acciones del usuario.

Existen dos pasos por separado para controlar los eventos relacionados con los datos enviados. Hay quedetectar las modificaciones en los datos. Luego ejecutaremos los métodos que controlen esos cambios. Esteproceso de dos pasos se traduce directamente a los métodos que deben realizarse para que nuestros controlespersonalizados puedan controlar eventos. Nosotros determinaremos si un evento necesita desencadenarse,y luego ejecutar un método que lo desencadene. El evento podrá, entonces, ser controlado por la páginaASP.NET que implementa a este control.

Para ejecutar un evento de un control personalizado, primero debemos decidir que evento deseamoscontrolar. ¿Queremos reaccionar a modificaciones en un cuadro de texto? ¿Al hacer clic en un botón?

Imports System.Collections.SpecializedPublic Class Class2 : Inherits Control : Implements IpostBackDataHandler

Public Event TextChanged(ByVal o As Object, ByVal a As EventArgs)

Protected Sub ontextchanged(ByVal e As EventArgs)RaiseEvent TextChanged(Me, e)

End Sub

Public Sub Raisepostdatachangedevent() Implements IPostBackDataHandler.RaisePostDataChangedEvent

ontextchanged(EventArgs.Empty)End Sub

Public Function loadpostdata(ByVal postdatakey As String, ByVal values As NameValueCollection) As BooleanImplements IPostBackDataHandler.LoadPostData

Dim strNuevo As String = Me.mensajeDim strAnterior As String = values(postdatakey)If Not strAnterior = strNuevo Then

Me.mensaje = strNuevoReturn True

End IfReturn False

End Function

APLICACIONES WEB CON ASP.NET

5

Page 64: Módulo_11_Aplicaciones Web con ASP

Public Property mensaje() As StringGet

mensaje = ViewState(“Mensaje”).ToStringEnd GetSet(ByVal Value As String)

ViewState(“Mensaje”) = ValueEnd Set

End Property

Protected Overrides Sub render(ByVal output As HtmlTextWriter)output.Write(“<input name=” & Me.UniqueID & “ type=text value=”“” & Me.mensaje & “”“>”)

End Sub

End Class

Implements IPostBackDaaHandler, es una interfaz que define la manera en que los controles tratan lainformación devuelta; ofrece un anteproyecto de la forma en que puede escribir el código. Éste es unelemento estándar que es necesario si queremos controlar eventos, por lo que no debemos preocuparnosmucho por él.

Declaramos un evento. Debemos utilizar la palabra clave Event. En este caso, controlaremos el cambio deltexto en nuestro control personalizado, y por ello el nombre del evento: TextChanged.

Declaramos un procedimiento, OnTextChanged, que ejecuta el evento TextChanged. Recordamos que ennuestras páginas ASP.NET utilizamos la sintaxis OnNombreEvento para especificar controladores de eventospara nuestros controles. Luego ejecutamos el método RaiseEvent que desencadena el evento TextChangedcon los parámetros establecidos. Luego encontramos el método LoadPostData. Este método toma dos parámetros: el primero establece elnombre del control cuyos datos se examinarán y el segundo especifica los datos que el usuario envió juntocon el formulario. El método LoadPostData devuelve Trae si deseamos que el evento sea controlado, y Falseen cualquier otro caso.

Examinamos los datos enviados. Recuperamos el anterior valor del control al acceder a la propiedad Mensajede nuestro control. Luego obtenemos los nuevos datos a través del segundo parámetro en el métodoLoadPostData. Comparamos los valores para determinar si los datos han cambiado. Si es el caso,devolveremos True lo que indicará a ASP.NET que debe ejecutarse un método para controlar este evento. Deotra forma, devolverá False.

Finalmente, RaisePostDataChangedEvent, ejecuta los métodos para controlar el evento. Tan sóloejecuta el método OnTextChanged que, a su vez, desencadena el evento TextChanged, mismo queluego pude ser controlado en la página ASP.NET.

APLICACIONES WEB CON ASP.NET

6

Page 65: Módulo_11_Aplicaciones Web con ASP

No debemos olvidar al importar el espacio de nombres System.Collections.Specialized.

- Primero generamos un evento con la palabra clave Event, y luego con la sintaxis OnEvento generamosun método que desencadena el evento con el método RaiseEvent.

- Luego usamos el método estándar LoadPostData para determinar si los datos han cambiado y si ellogarantiza que se desencadene un evento.

- El método RaisePostDataChangedEvent es el responsable de ejecutar otro método que desencadenael evento que definimos en el paso 1.

<cc2:Class2 id=”Class21” mensaje=”hola mundo” runat=”server”> </cc2:Class2>

Este contenido es como cualquier otro control dentro de una página ASP.NET. La implementación de estecontrol, tiene OnTextChanged, que provocará que se ejecute el método que siga a continuación cuando losdatos en el cuadro de texto hayan cambiado.

OnTextChanged=”ejecutar”

El método ejecutar escribe un mensaje al explorador Web avisando que el evento se ha desencadenado ycontrolado. Observamos que si no se modifica el texto, el método ejecutar no se ejecutar, por lo cual elevento no se desencadena.

Public sub ejectuar(o as Object, a as EventArgs)Response.Write(“Evento ejecutado”)

End Sub

APLICACIONES WEB CON ASP.NET

7

Page 66: Módulo_11_Aplicaciones Web con ASP

3 .Acceso a los datos de usuario.

Las páginasASPX

La información acerca de los datos mostrados y la interación con el usuario es almacenada en el archivoASPX. Si examinamos el código de esta página ASPX, encontraremos la declaración del primer controlSqlDataSource, de manera similar a la siguiente:

< asp:sqldatasource id=”SqlDataSource1” runat=”server” selectcommand=”select customerid, companyname from customers”providername=”System.Data.OleDb” connectionstring=”Provider=SQLOLEDB.1;Integrated Security=SSPI;

Persist Security Info=False;Initial Catalog=Northwind;Data Source=localhost;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=SERVER1;Use Encryption for Data=False;Tag with column collation when possible=False” >< /asp:sqldatasource >

La información que ingresamos en los diferentes pasos del asistente es colocada en esta porción de código.El control SqlDataSource contiene atributos para la cadena de conexión y para la sentencia de selección queusamos para obtener la información. Si examinamos con detenimiento notarás que System.Data.OleDb esusado para comunicarnos con SQL Server. Pero está de más indicar que en próximas versiones será usadoSystem.Data.SqlClient.

El código generado para el control DropDownList es:

< asp:dropdownlist id=”DropDownList1” runat=”server” datavaluefield=”customerid” datasourceid=”SqlDataSource1”datatextfield=”companyname” autopostback=”True”>

< /asp:dropdownlist>

APLICACIONES WEB CON ASP.NET

8

Page 67: Módulo_11_Aplicaciones Web con ASP

Esta porción de código contiene información que especifica la fuente de datos a usar, así como las columnasde la fuente de datos que constituyen el valor y el texto mostrado en el control DropDownList. Cuando uncliente es seleccionado en este control DropDownList, cierta información necesita ser pasada al siguientecontrol SqlDataSource donde será usada como un parámetro en la consulta.

< asp:sqldatasource id=”SqlDataSource2” runat=”server” selectcommand=”select * from orders where customerid=?”providername=”System.Data.OleDb” connectionstring=”Provider=SQLOLEDB.1;Integrated Security=SSPI;

Persist Security Info=False;Initial Catalog=Northwind;Data Source=localhost;Use Procedure for Prepare=1;Auto Translate=True;PacketSize=4096;Workstation ID=SERVER1;Use Encryption for Data=False;Tag with column collation when possible=False”>

< selectparameters>< asp:controlparameter

name=”?” propertyname=”SelectedValue” controlid=”DropDownList1”>

< /asp:controlparameter>< /selectparameters>

< /asp:sqldatasource>

Este código es similar al del primer control SqlDataSource, no obstante, notarás que contiene una secciónllamada selectparameters. El valor del parámetro es obtenido de la propiedad SelectedValue del controlDropDownList1. De esta manera, estos controles se enlazan declarativamente.

Finalmente el control GridView se enlaza con el segundo control SqlDataSource: < asp:gridview

id=”GridView1” runat=”server” datasourceid=”SqlDataSource2” autogeneratecolumns=”False”>

APLICACIONES WEB CON ASP.NET

9

Page 68: Módulo_11_Aplicaciones Web con ASP

Este modelo asegura que la mayoría de escenarios puedan ser manejados declarativamente dentro de unapágina ASPX.

Otras Fuentes de Datos

Hay una variedad de controles DataSource además del control SqlDataSource. Ellos son: AccessDataSource,ObjectDataSource, DataSetDataSource, XmlDataSource, y SiteMapDataSource.

AccessDataSource

Access es visto como una base de datos viable para Sitios Web ASP.NET. Realmente hay un númerosorprendente de Sitios Web que usan Access como su Base de Datos y manejan decenas de miles de peticionespor día. Si pensamos acerca de esto, nos daremos cuenta que Access es apropiado para escenarios donde haybajo volumen de información. Access fue creado para realizar un fácil despliegue, es decir, no hay servidoresde base de datos que instalar, no hay scripts que ejecutar, etc. La seguridad es otro punto a tener en mente,mientras que Access no ofrece el control granular de SQL Server, frecuentemente esto no es necesario enpequeños escenarios, pero si en grandes escenarios donde muchos sitios a la vez se encuentran accediendoa la misma Base de Datos. Algún nivel de seguridad puede ser provisto colocando los permisos delectura/escritura al archivo.

ObjectDataSource

Un Sitio Web puede ser construido declarativamente. Estos sitios son considerados Sitios Web en 2 capas,donde la capa de presentación se comunica directamente con la Base de Datos. En muchos escenarios, losSitios Web son construidos en base a más capas lo que provee una mejor abstracción y encapsulación.Podríamos pensar que si necesitamos una capa de acceso a datos, lo que hemos hecho en el ejemplo anteriordebería ser cambiado totalmente. Veamos la siguiente capa de acceso a datos: Public Class Customers

Public Function GetCustomers() As DataSetDim cn As New SqlConnection( _

ConfigurationSettings.ConnectionStrings( _“northwindConnection”))

Dim da As New SqlDataAdapter( _“select customerid, companyname from customers”, cn)

Dim ds As New DataSetda.Fill(ds, “Customers”)

APLICACIONES WEB CON ASP.NET

10

Page 69: Módulo_11_Aplicaciones Web con ASP

El método GetCustomers retorna el identificador del cliente y su nombre. Esta información será mostradaen el control DropDownList. Cuando el usuario seleccione un cliente, el método GetOrders será invocado yse le pasará como parámetro el cliente seleccionado. En este momento, se retornarán las ordenes de estecliente. Obviamente, no utilizaremos un control SqlDataSource, porque no queremos que la página Web secomunique directamente con la base de datos. El control ObjectDataSource fue diseñado para este escenario.A través de la ventana de propiedades, podemos configurar un par de propiedades en el objetoObjectDataSource, lo que generará el siguiente código:

< asp:objectdatasource id=”ObjectDataSource1” runat=”server” typename=”DAL.Customers”selectmethod=”GetCustomers”>

Esto simplemente nos indica que el control ObjectDataSource instanciará la clase DAL.Customers, y llamaráel método GetCustomers para obtener la información. Entonces, el control DropDownList estára ligado alcontrol ObjectDataSource exactamente como estuvo ligado al control SqlDataSource.

Cuando el usuario seleccione un cliente del control DropDownList, el método GetOrders necesita ser llamadoy el cliente seleccionado necesita ser pasado como su parámetro. Usando la ventana de propiedades,podemos especificar los parámetros de un método de una manera similar a la utilizada para especificar losparámetros para una consulta SQL, resultando el siguiente código:

< asp:objectdatasource id=”ObjectDataSource2” runat=”server” typename=”DAL.Customers”selectmethod=”GetOrders”>< selectparameters>

Un elemento selectparameters ha sido añadido y contiene casi la misma información que cuando el controlSqlDataSource fue utilizado. Se especifica el nombre del parámetro y se establece que la propiedadSelectedValue del control DropDownList1 debería usarse como el valor para este parámetro. Finalmente, elcontrol GridView se enlaza al control ObjectDataSource. Esto implementa exactamente la mismafuncionalidad que el primer ejemplo, pero usando una capa de acceso a datos para obtener la información.El control ObjectDataSource puese ser enlazado a cualquier método que retorne un objeto DataSet, o unobjeto IEnumerable. Esto significa que el método podría retornar un objeto DataReader, ó podría retornaruna colección de clases. La capa de acceso a datos podría haber retornado un ArrayList de clases Customer,y la interfaz de usuario debería funcionar de manera idéntica.

APLICACIONES WEB CON ASP.NET

11

Page 70: Módulo_11_Aplicaciones Web con ASP

4 .Estudio de los principales controles Web.

GridView

Una tarea recurrente en el desarrollo de software es mostrar los datos tabulares. ASP.NET proporciona variasherramientas para mostrar los datos tabulares en una cuadrícula, entre las que se incluye el controlGridView. Con el control GridView, puede mostrar, editar y eliminar datos de muchos tipos diferentes deorígenes de datos, entre los que se incluyen bases de datos, archivos XML y objetos comerciales que exponenlos datos.

Con GridView, puede:

- Enlazar y mostrar los datos automáticamente desde un control de origen de datos.

- Seleccionar, ordenar, paginar, editar y eliminar datos desde un control de origen de datos.

Para personalizar el aspecto y el comportamiento del control GridView, puede:

- Especificar columnas y estilos personalizados.

- Utilizar plantillas para crear elementos de interfaz de usuario personalizados.

- Agregar su propio código a la funcionalidad del control GridView controlando eventos.

DetailsView:

El control DetailsView permite mostrar, editar, insertar o eliminar un solo registro por vez de su origen dedatos asociado. De forma predeterminada, el control DetailsView muestra cada campo de un registro en supropia línea. El control DetailsView se utiliza normalmente para actualizar e insertar los nuevos registros,a menudo en un escenario detallado o más general en el que el registro seleccionado del control principaldetermina el registro que se va a mostrar en el control DetailsView. El control DetailsView muestrasolamente un único registro de datos por vez, aunque su origen de datos exponga varios registros.

El control DetailsView se basa en las funciones del control del origen de datos para realizar tareas comoactualizar, insertar o eliminar registros. El control DetailsView no admite la función de ordenación.

APLICACIONES WEB CON ASP.NET

12

Page 71: Módulo_11_Aplicaciones Web con ASP

El control DetailsView puede paginar automáticamente los datos en su origen de datos asociado, siempre quelos datos estén representados mediante un objeto que admita la interfaz ICollection o que el origen de datossubyacente admita la paginación. El control DetailsView proporciona la interfaz de usuario para desplazarseentre los registros de datos. Para habilitar la función de paginación, establezca la propiedad AllowPaging entrue.

Puede seleccionar un registro concreto del origen de datos asociado mediante la paginación de dicho registro.El registro mostrado por el control DetailsView es el registro seleccionado actual. Enlace de datos con elcontrol DetailsView

El control DetailsView proporciona estas opciones para enlazar los datos:

- Se pueden enlazar datos mediante la propiedad DataSourceID, que permite enlazar el controlDetailsView a un control de origen de datos. Éste es el enfoque recomendado, ya que permite alcontrol DetailsView aprovechar de las funciones del control del origen de datos y proporcionar unafuncionalidad integrada para la actualización y paginación.

- Se pueden enlazar datos mediante la propiedad DataSource, que permite establecer enlaces adistintos objetos, incluidos los lectores de datos y losconjuntos de datos de ADO.NET. Este enfoquerequiere que se escriba código para cualquier función adicional, como por ejemplo actualización ypaginación.

Cuando establece un enlace a un origen de datos mediante la propiedad DataSourceID, el control DetailsViewadmite el enlace de datos bidireccional. Además de que el control muestre los datos, puede permitir que elcontrol admita automáticamente las operaciones de inserción, actualización y eliminación de los datosenlazados.

Trabajar con los datos del control DetailsView

El control DetailsView se enlaza a un control del origen de datos que, a su vez, controla las tareas deconexión a un almacén de datos y devuelve los datos seleccionados. La operación de enlazar el controlDetailsView a datos es tan simple como definir la propiedad DataSourceID de forma declarativa. Tambiénpuede establecer un enlace al origen de datos en el código.

Para habilitar la edición, establezca la propiedad AutoGenerateEditButton en true. El control DetailsViewrepresentará a continuación un botón Editar además de los campos de datos. Al hacer clic en el botón Editar,el control DetailsView pasa al modo de edición. En el modo de edición, la propiedad CurrentMode del control

APLICACIONES WEB CON ASP.NET

13

Page 72: Módulo_11_Aplicaciones Web con ASP

DetailsView cambia de ReadOnly a Edit y cada campo del control representa su interfaz de usuario deedición, como un cuadro de texto o una casilla de verificación. También puede personalizar la interfaz deusuario de edición utilizando estilos, objetos DataControlField y plantillas.

FormView :

El control FormView permite trabajar con un único registro de un origen de datos de forma similar al controlDetailsView. La diferencia entre los controles FormView y DetailsView radica en que el control DetailsViewutiliza un diseño tabular donde cada campo del registro se muestra como una fila independiente. En cambio,el control FormView no especifica un diseño predefinido para mostrar el registro. Por tanto, debe crear unaplantilla que contenga controles para mostrar los campos individuales del registro. La plantilla contiene elformato, los controles y las expresiones de enlace que se utilizan para crear el formulario.

El control FormView se utiliza normalmente para actualizar e insertar los nuevos registros, a menudo en unescenario detallado o más general en el que el registro seleccionado del control principal determina elregistro que se va a mostrar en el control FormView..

El control FormView se basa en las funciones del control del origen de datos para realizar tareas comoactualizar, insertar o eliminar registros. El control FormView muestra solamente un único registro de datospor vez, aunque su origen de datos exponga varios registros.

El control FormView puede paginar automáticamente un único registro por vez de los datos de su origen dedatos asociado, siempre que los datos estén representados mediante un objeto que implemente la interfazICollection o que el origen de datos subyacente admita la paginación. El control FormView proporciona lainterfaz de usuario para desplazarse entre los registros. Para habilitar la función de paginación, establezcala propiedad AllowPaging en true y especifique un valor en PagerTemplate.

El control FormView dispone de varios eventos que puede controlar para ejecutar su propio código. Loseventos se desencadenan antes y después de que se produzcan las operaciones de inserción, actualización yeliminación del control del origen de datos asociado. También puede escribir controladores para los eventosItemCreated y ItemCommand.

Repeater

El control de servidor Web Repeater es un control contenedor que permite crear listas personalizadas apartir de los datos disponibles para la página. El control Repeater no incorpora una representación propia,lo que significa que deberá proporcionar el diseño de este control mediante la creación de plantillas. Cuando

APLICACIONES WEB CON ASP.NET

14

Page 73: Módulo_11_Aplicaciones Web con ASP

se ejecuta la página, el control Repeater recorre cada uno de los registros del origen de datos y representaun elemento para cada registro.

Dado que el control Repeater no dispone de una apariencia predeterminada, puede utilizarlo para crearvarios tipos de listas; entre éstas, se encuentran las siguientes:

- Diseño de tabla- Lista delimitada por comas (por ejemplo, a, b, c, d, y así sucesivamente)- Lista con formato XML

Utilizar plantillas con el control Repeater

Para poder utilizar el control Repeater, deberá crear plantillas que definan el diseño del contenido delcontrol. Dichas plantillas pueden incluir cualquier combinación de formato y controles. Si no se defineninguna plantilla o ninguna de las plantillas contiene elementos, el control no aparecerá en la página cuandose ejecute la aplicación.

En la tabla siguiente se describen las plantillas admitidas por el control Repeater.

APLICACIONES WEB CON ASP.NET

15

Page 74: Módulo_11_Aplicaciones Web con ASP

Enlazar datos al control Repeater

El origen de datos más común es un control de origen de datos, como SqlDataSource u ObjectDataSource.Opcionalmente, puede enlazar un control Repeater a cualquier clase que implemente la interfazIEnumerable, que incluye los conjuntos de datos de ADO.NET (clase DataSet), los lectores de datos (clasesSqlDataReader u OleDbDataReader) o la mayoría de las colecciones.

Cuando se enlazan datos, se debe especificar un origen de datos para el control Repeater de forma general.Cuando se agregan controles al control Repeater, por ejemplo, cuando se agregan los controles Label oTextBox en una plantilla, se debe utilizar la sintaxis de enlace de datos para enlazar el control individual aun campo de los elementos devueltos por el origen de datos. Aquí vemos que se muestra una propiedadItemTemplate que contiene un control Label enlazado a datos.

Visual Basic<%@ Page Language=”VB” %>

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

<html ><head id=”Head1” runat=”server”>

<title>ASP.NET Repeater Example</title></head><body>

<form id=”form1” runat=”server”><div><asp:Repeater ID=”Repeater1” runat=”server” DataSourceID=”SqlDataSource1”><HeaderTemplate><table><tr>

<th>Name</th>

<th>Description</th>

</tr></HeaderTemplate><ItemTemplate><tr><td style=”background-color:#CCFFCC”>

<asp:Label runat=”server” ID=”Label1” Text=’<%# Eval(“CategoryName”) %>’ /></td><td style=”background-color:#CCFFCC”>

APLICACIONES WEB CON ASP.NET

16

Page 75: Módulo_11_Aplicaciones Web con ASP

<asp:Label runat=”server” ID=”Label2” Text=’<%# Eval(“Description”) %>’ /></td>

</tr></ItemTemplate><AlternatingItemTemplate><tr><td>

<asp:Label runat=”server” ID=”Label3” Text=’<%# Eval(“CategoryName”) %>’ /></td><td>

<asp:Label runat=”server” ID=”Label4” Text=’<%# Eval(“Description”) %>’ /></td>

</tr></AlternatingItemTemplate><FooterTemplate></table>

</FooterTemplate></asp:Repeater><asp:SqlDataSource ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString %>”ID=”SqlDataSource1” runat=”server” SelectCommand=”SELECT [CategoryID], [CategoryName],

[Description] FROM [Categories]“></asp:SqlDataSource></div>

</form></body></html>

C#<%@ Page Language=”C#“ %>

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

<html ><head id=”Head1” runat=”server”>

<title>ASP.NET Repeater Example</title></head><body>

<form id=”form1” runat=”server”><div><asp:Repeater ID=”Repeater1” runat=”server” DataSourceID=”SqlDataSource1”><HeaderTemplate>

APLICACIONES WEB CON ASP.NET

17

Page 76: Módulo_11_Aplicaciones Web con ASP

<table><tr>

<th>Name</th>

<th>Description</th>

</tr></HeaderTemplate><ItemTemplate><tr><td style=”background-color:#CCFFCC”>

<asp:Label runat=”server” ID=”Label1” Text=’<%# Eval(“CategoryName”) %>’ /></td><td style=”background-color:#CCFFCC”>

<asp:Label runat=”server” ID=”Label2” Text=’<%# Eval(“Description”) %>’ /></td>

</tr></ItemTemplate><AlternatingItemTemplate><tr><td>

<asp:Label runat=”server” ID=”Label3” Text=’<%# Eval(“CategoryName”) %>’ /></td><td>

<asp:Label runat=”server” ID=”Label4” Text=’<%# Eval(“Description”) %>’ /></td>

</tr></AlternatingItemTemplate><FooterTemplate></table>

</FooterTemplate></asp:Repeater><asp:SqlDataSource ConnectionString=”<%$ ConnectionStrings:NorthwindConnectionString %>”ID=”SqlDataSource1” runat=”server” SelectCommand=”SELECT [CategoryID], [CategoryName],

[Description] FROM [Categories]“></asp:SqlDataSource></div>

</form></body></html>

APLICACIONES WEB CON ASP.NET

18

Page 77: Módulo_11_Aplicaciones Web con ASP

Eventos admitidos por el control Repeater

El evento ItemCreated, ofrece una manera de personalizar el proceso de creación de elementos en tiempode ejecución. El evento ItemDataBound también permite personalizar el control Repeater, pero una vez quelos datos están disponibles para su inspección. Por ejemplo, si estaba utilizando el control Repeater paramostrar una lista de tareas, podría mostrar los elementos atrasados en rojo, los elementos finalizados ennegro y las demás tareas en verde. Puede utilizar cualquier evento para reemplazar el formato de ladefinición de plantilla.

El evento ItemCommand se produce en respuesta a los clics que se hagan con el botón en elementosindividuales. Este evento está diseñado para permitirle incrustar un control de servidor Web Button,LinkButton o ImageButton en una plantilla de elemento y, a continuación, obtener una notificación cuandose haga clic en el botón. Cuando un usuario hace clic en el botón, el evento se envía al contenedor del botón(el control Repeater). El uso más común del evento ItemCommand es la programación de las operacionesde actualización y eliminación para el control Repeater. Dado que cada clic en el botón produce el mismoevento ItemCommand, es posible determinar el botón en el que se ha hecho clic estableciendo la propiedadCommandName de cada botón en un valor de cadena único. La propiedad CommandSource del parámetroRepeaterCommandEventArgs incluye la propiedad CommandName del botón en el que se ha hecho clic.

DataList :

El control DataList de servidor Web muestra datos en un formato que se puede definir mediante plantillas yestilos. El control DataList resulta útil para los datos que se encuentran en una estructura de repetición,como una tabla. El control DataList puede mostrar los datos con diferentes diseños, por ejemplo ordenadosen columnas o filas.

Puede configurar también el control DataList para permitir que los usuarios editen o eliminen información.También puede personalizar el control para que admita otras funcionalidades, como la selección de filas.Utilice plantillas para definir el diseño de los elementos de datos mediante la inclusión de controles y textoHTML. Por ejemplo, puede utilizar un control Label de servidor Web en un elemento para mostrar un campoprocedente del origen de datos.

En las secciones siguientes se presentan las características del control DataList.

APLICACIONES WEB CON ASP.NET

19

Page 78: Módulo_11_Aplicaciones Web con ASP

Enlazar datos al control

El control DataList de servidor Web debe estar enlazado a un origen de datos. El origen de datos más comúnes un control de origen de datos, como un control SqlDataSource u ObjectDataSource. Si lo desea, puedeenlazar también un control DataList a cualquier clase que implemente la interfaz IEnumerable, que incluyelos conjuntos de datos de ADO.NET (la clase DataSet ), lectores de datos ( las clases SqlDataReader uOleDbDataReader ) o la mayoría de las colecciones. Al enlazar datos, debe especificar un origen de datos parael control DataList como una unidad. Cuando agregue otros controles a este control, por ejemplo etiquetaso cuadros de texto incluidos en elementos de lista, puede enlazar las propiedades de los controles secundariosa los campos del elemento de datos actual.

Definir plantillas para elementos DataList

En el control DataList, puede definir el diseño de la información mediante plantillas.

En la tabla siguiente se describen las plantillas compatibles con el control DataList.

APLICACIONES WEB CON ASP.NET

20

Page 79: Módulo_11_Aplicaciones Web con ASP

Estilos

Para especificar la apariencia de los elementos de una plantilla, puede establecer el estilo de la plantilla.Por ejemplo, podría especificar que:

- Los elementos se representen con texto negro sobre un fondo blanco.- Los elementos alternos se representen con texto negro sobre un fondo gris claro.- El elemento seleccionado se represente con texto negro en negrita sobre un fondo amarillo.- Los elementos que se estén editando se representen con texto negro sobre un fondo azul claro.

Cada plantilla admite su propio objeto de estilo, cuyas propiedades pueden establecerse tanto en tiempo dediseño como en tiempo de ejecución. Los estilos con los que puede trabajar son los siguientes:

- AlternatingItemStyle- EditItemStyle- FooterStyle- HeaderStyle- ItemStyle- SelectedItemStyle- SeparatorStyle

Para obtener información general, vea Controles de servidor Web ASP.NET y estilos de CSS.

Diseño de los elementos

El control DataList utiliza una tabla HTML para diseñar la representación de los elementos a los que se aplicala plantilla. Puede controlar el orden, la dirección y el número de columnas de cada celda de la tablautilizada para representar los elementos DataList. En la tabla siguiente se describen las opciones de diseñoadmitidas por el control DataList.

APLICACIONES WEB CON ASP.NET

21

Page 80: Módulo_11_Aplicaciones Web con ASP

Eventos

El evento ItemCreated, proporciona un medio para personalizar el proceso de creación de elementos entiempo de ejecución. El evento ItemDataBound ofrece también la capacidad de personalizar el controlDataList, aunque después de que los datos estén disponibles para su inspección. Por ejemplo, si estuvierautilizando el control DataList para mostrar una lista de tareas pendientes, podría representar los elementosatrasados con texto en rojo, los elementos completados en negro y el resto con texto en verde. Puede utilizarcualquier evento para reemplazar el formato de la definición de la plantilla.

APLICACIONES WEB CON ASP.NET

22

Page 81: Módulo_11_Aplicaciones Web con ASP

Los eventos restantes se producen en respuesta a clics en botones en elementos de la lista. Los eventosestán diseñados para ayudarle a responder a la funcionalidad de uso más común del control DataList. Seadmiten cuatro eventos de este tipo:

- EditCommand- DeleteCommand- UpdateCommand- CancelCommand

Para que estos eventos se desencadenen, agregue los controles Button, LinkButtono ImageButton a lasplantillas en el control DataList y establezca la propiedad CommandName de los botones en una palabraclave, como edit, delete, update o cancel. Cuando un usuario hace clic en un botón de un elemento, elevento se envía al contenedor del botón (el control DataList). El evento exacto que desencadena el botóndepende del valor de la propiedad CommandName del botón en que se hace clic. Por ejemplo, si la propiedadCommandName de un botón se establece en edit, el botón desencadena un evento EditCommand cuando sehace clic. Si la propiedad CommandName se establece en delete, el botón desencadena un eventoDeleteCommand, etc.

El control DataList también admite el evento ItemCommand, que se desencadena cuando un usuario haceclic en un botón que no tiene un comando predefinido como edit o delete. Puede utilizar este evento paracrear una funcionalidad personalizada; para ello, establezca la propiedad CommandName de un botón enel valor que necesite y, a continuación, pruébelo en el controlador de eventos ItemCommand. Puede utilizareste enfoque, por ejemplo, al seleccionar un elemento, tal como se describe en Cómo: Permitir que losusuarios seleccionen elementos en los controles DataList de servidor Web.

Para obtener más información sobre los eventos de los formularios Web Forms, vea Modelo de eventos decontrol de servidor Web ASP.NET.

Editar y seleccionar elementos

Puede permitir que los usuarios editen elementos individuales del control. Otros controles de datos, comoGridView, DetailsView y FormView, pueden interactuar con los controles del origen de datos para admitir lasoperaciones de paginación o las actualizaciones automáticas. Por el contrario, el control DataList no puedeaprovechar las funciones de actualización automática de los controles del origen de datos, o de paginaciónu ordenación. Para realizar las actualizaciones, la paginación y la ordenación mediante el control DataList,deberá realizar la tarea de actualización en el código que escriba.

APLICACIONES WEB CON ASP.NET

23

Page 82: Módulo_11_Aplicaciones Web con ASP

La estrategia general consiste en crear una propiedad EditItemTemplate que proporcione el diseño y loscontroles adecuados para la edición. También deberá proporcionar un medio para que los usuarios indiquenque desean editar el elemento. El modo más habitual de hacer esto consiste en incluir un botón en la plantilladel elemento (y si se está utilizando, en la propiedad AlternatingItemTemplate ) y, a continuación,establecer la propiedad CommandName del botón en edit. Entonces, cuando se hace clic en el botón, elcontrol DataList desencadena automáticamente el evento EditCommand. En el código que escriba para elcontrolador de eventos, establezca el elemento en modo de edición, que muestra la propiedadEditItemTemplate.

La propiedad EditItemTemplate normalmente incluye botones que permiten a los usuarios guardar odescartar sus cambios (por ejemplo, los botones Actualizar y Cancelar ). Estos botones funcionan de manerasimilar al botón Editar: envían un mensaje de comando predefinido (update o cancel) al control DataList,que desencadena el evento UpdateCommand o CancelCommand al que puede responder de formaapropiada. Para obtener más información, vea Cómo: Permitir que los usuarios editen elementos en controlesDataList de servidor Web.

El proceso de selección de un elemento es similar y utiliza el evento SelectedIndexChanged. Agregue unbotón a la propiedad de plantilla ItemTemplate y establezca su propiedad CommandName en select. Acontinuación, escriba un controlador para el evento SelectedIndexChanged. El eventoSelectedIndexChanged se desencadena cuando el usuario hace clic en el botón Seleccionar. Para obtenerinformación detallada, vea Cómo: Permitir que los usuarios seleccionen elementos en los controles DataListde servidor Web. Para obtener más información, vea Cómo: Permitir que los usuarios seleccionen elementosen los controles DataList de servidor Web.

APLICACIONES WEB CON ASP.NET

24

Page 83: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEBPARA VALIDACIÓN DE

DATOS

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 84: Módulo_11_Aplicaciones Web con ASP

ÍNDICE

CONTROLES WEB PARA VALIDACIÓN DE DATOS

1. Diferencias entre ASP y ASP.Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

Page 85: Módulo_11_Aplicaciones Web con ASP

3

CONTROLES WEB PARA VALIDACIÓN DE DATOS

1. Diferencias entre ASP y ASP.Net

Usar los controles de validación ASP.NET desde Visual Studio .NET

La validación de los datos introducidos por el usuario puede ser complejo.

.NET Framework proporciona controles de validación que validan los datosdel usuario y muestran mensajes de error siempre que se encuentra un datono válido en alguno de ellos.

Esto ahorra tiempo cuando se necesita duplicar esta validación en el clientey en el servidor. Además, se proporciona un control ValidationSummary paramostrar todos los mensajes de error de una página en un área de la pantalla.

Los pasos siguientes permiten crear una aplicación Web ASP.NET que pide alusuario el nombre de usuario, la dirección de correo electrónico y lacontraseña. Cuando el usuario envía la información solicitada, los controlesde validación del formulario validan los datos especificados por el usuario ymuestran los mensajes de error en una lista resumida en la parte inferior dela pantalla.

Pasos a seguir

1. Iniciamos Visual Studio .NET o Visual Studio.

2. Creamos un nuevo proyecto Web ASP.NET en Visual Basic .NET o enVisual Basic.

3. Cambiamos a la vista HTML de la ventana WebForm1.aspx.

4. Agregamos controles de entrada y los mensajes asociados al formulariopara solicitar datos al usuario.

5. En la ventana HTML de WebForm1, copiamos y pegamos el códigosiguiente entre las etiquetas de apertura y cierre del formulario.

Page 86: Módulo_11_Aplicaciones Web con ASP

<table><tr width=100><td>UserName:</td><td><input id=txtUserName type=text size=20 maxlength=15 runat=server/>*</td></tr><tr width=100><td>E-mail Address:<td><input id=txtEmail type=text size=35 maxlength=30 runat=server/>[email protected])</td>

</tr><tr width=100><td>Password:</td><td><input id=txtPassword type=password size=15 maxlength=10 runat=server/>*</td></tr> <tr width=100><td>Retype Password:</td><td><input id=txtConfirmPassword type=password size=15 maxlength=10 runat=server/>*</td></tr></table>

6. Cuando peguemos código en la ventana HTML, es importante pegar los segmentos de código comoHTML. Para ello, seleccionamos Pegar como HTML en el menú contextual.

Clase System.Web.UI.Control

.NET Framework contiene controles de validación que, cuando se colocan enuna página Web ASP.NET, validan los datos del usuario especificados en loscampos de los controles y muestran mensajes de error asociados para cadacontrol.

4

CONTROLES WEB PARA VALIDACIÓN DE DATOS

Page 87: Módulo_11_Aplicaciones Web con ASP

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Packrecomendados que necesitará.

- Visual Studio .NET Beta 2005 o posterior.- Servicios de Microsoft Internet Information Server (IIS) 5.0 o posterior.

Se debe estar familiarizado con los temas siguientes:

- Aplicaciones web - ASP.NET

Controles RequiredFieldValidator

Los controles RequiredFieldValidator comprueban que se haya especificado algún valor para el campo queespecifica el control. Agregaremos controles RequiredFieldValidator al formulario para los campos UserNamey Password.

En la ventana HTML de WebForm1, copiaremos y pegaremos el código siguiente, después de la etiqueta</table>.

<asp:RequiredFieldValidator id=valUserNameRequired ControlToValidate=txtUserNameErrorMessage="UserName is a required field." EnableClientScript=true Display=NoneRunat=server/> <asp:RequiredFieldValidator id=valPasswordRequiredControlToValidate=txtPassword ErrorMessage="Password is a required field."EnableClientScript=true Display=None Runat=server/> <asp:RequiredFieldValidatorid=valConfirmPasswordRequired ControlToValidate=txtConfirmPasswordErrorMessage="Password confirmation is a required field."EnableClientScript=trueDisplay=None Runat=server/>

Campos de contraseña

Los campos de contraseña se comprueban generalmente exigiendo queel usuario escriba la misma contraseña dos veces. El controlCompareValidator compara el contenido de dos campos de entrada ygenera un mensaje de error si no coinciden.

CONTROLES WEB PARA VALIDACIÓN DE DATOS

5

Page 88: Módulo_11_Aplicaciones Web con ASP

En la ventana HTML de WebForm1, copia y pega el código siguiente después de los controles de validaciónagregados en el paso 5:

<asp:CompareValidator id=valComparePassword ControlToValidate=txtConfirmPasswordErrorMessage="Password fields must match." ControlToCompare=txtPassword Display=NoneEnableClientScript=true Runat=server/>

Control RegularExpressionValidator

Hay campos que a veces requieren una validación más personalizada, porejemplo, un campo de dirección de correo electrónico.

El control RegularExpressionValidator garantiza que se sigue el formato básicode [email protected]. El contenido del campo se prueba con respectoa una expresión regular y, si no, se efectúa una coincidencia con la expresión.El usuario recibe un mensaje de error.

Agregaremos un control RegularExpressionValidator para validar el formato de la dirección de correoelectrónico que proporcione el usuario.

En la ventana HTML de WebForm1, copiamos y pegamos el código siguiente después de los controles devalidación anteriores:

<asp:RegularExpressionValidator ID=valEmailAddressControlToValidate=txtEmailValidationExpression=".*@.*\..*" ErrorMessage="Email address is invalid.“ Display=None EnableClientScript=true Runat=server/>

Agregar botón enviar

Agregaremos un botón Enviar para permitir al usuario enviar la página alservidor y validar el contenido de los controles en el formulario.

CONTROLES WEB PARA VALIDACIÓN DE DATOS

6

Page 89: Módulo_11_Aplicaciones Web con ASP

En la ventana HTML de WebForm1, copiaremos y pegaremos el código siguiente después de los controles devalidación anteriores:

<br><input type=submit id=cmdSumbit value=submit runat=server/>

Control ValidationSummary

Finalmente, se usa un control ValidationSummary para mostrar todos loserrores encontrados en una única área del formulario.

En la ventana HTML de WebForm1, copiamos y pegamos el código siguientedespués del código del botón Enviar:

<br><br><asp:ValidationSummary id=ValSummary HeaderText="The following errors were found:" ShowSummary=True DisplayMode=List Runat=server/>

Haremos clic en Guardar, y en el menú Depurar, haremos clic en Iniciar para generar y ejecutar la aplicación.

Comprobación

- Si el usuario hace clic en Enviar sin especificar ningún valor de entrada, se deben mostrar los tresmensajes de error de campo requerido.

- Si el usuario envía dos valores de contraseña que no coinciden, se deberíamostrar el mensaje de error "Los campos de contraseña deben coincidir".

- Si el usuario envía una dirección de correo electrónico que no tiene elformato adecuado, se debe mostrar el mensaje de error "La dirección decorreo electrónico no es válida".

CONTROLES WEB PARA VALIDACIÓN DE DATOS

7

Page 90: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

8

Validación de las páginas ASP.Net

En ASP.NET es fácil realizar la validación de las páginas ASP.Net. Existen un grupo de opciones para validarlo que capturemos, como la comparación de patrones y asegurarnos que la captura se encuentra en ciertorango.

Los controles de validación ofrecen varios métodos para advertir a los usuarios que han incurrido en algúnerror, y lo hacen de forma dinámica sin enviar nada al servidor.

Esquemas de validación

Si una aplicación espera un tipo de dato y se le da otro, podría provocar unerror o un colapso. La validación de lo capturado es el proceso de asegurarseque el usuario proporciona el tipo de dato correcto.

Es imprescindible la validación de la captura cuando permitimos a losusuarios que tecleen manualmente información en nuestras páginas ASP.NET.

La validación de la captura también ofrece beneficios a los desarrolladores; específicamente, datoscoherentes. Cuando diseñemos nuestra aplicación, siempre deberemos confiar que los datos se encuentranen un formato específico. Si necesitamos sumar dos números, debemos asegurarnos que sean números enrealidad. Sino es así, la operación de suma no funcionará y nuestra aplicación fallará. Cuando se haya validadola captura con antelación, sabremos que nuestra operación de suma se hará sin problemas.

Page 91: Módulo_11_Aplicaciones Web con ASP

Validación en ASP.Net

- Los controles Validation (CV) de servidor de ASP.NET nos permitenvalidar con facilidad cualquier dato que hayamos capturado.

- Estos controles admiten validaciones como campos necesarios ycomparaciones de patrones, y también facilitan la generación denuestras propias validaciones personalizadas.

- Además, los controles Validation nos permiten personalizar totalmente la forma en que se desplieganlos mensajes de error a los usuarios cuando los valores de los datos no pasan la validación.

Los controles Validation son similares a los controles Web. Se generan en el servidor, devuelven código HTML,al explorador Web y se declaran con la misma sintaxis:

<asp:ValidatorName runat=”server”ControlToValidate=”NombreControl”ErrorMessage=”Texto descriptivo” />

La diferencia es que estos controles no despliegan nada a menos que lo capturado no sea válido. Sino seráninvisibles y el usuario no se enterará de su existencia. Así pues, el trabajo de un control de validación esvigilar otro control de servidor y validar su contenido.

Propiedad ControlToValidate

La propiedad ControlToValidate especifica cuál es el control de servidor que será vigilado. Cuando el usuarioteclee datos en el control vigilado, el control de validación verificará los datos para asegurarse que cumplancon las normas que nosotros hayamos especificado.

Todos estos controles pertenecen al espacio de nombresSystem.Web.UI.WebControls.

CONTROLES WEB PARA VALIDACIÓN DE DATOS

9

Page 92: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

10

Tipos de controles Validation

Generar controles Validation

Para generar un control Validation en una página ASP.NET, tan sólo agregaremos la etiqueta adecuada devalidación a nuestro formulario Web.

Cada control Validation que agreguemos tiene una función específica: vigilar a otro control de servidor.Cuando un usuario teclea algo en ese control de servidor, su validador correspondiente analiza lo capturadoy determina si pasa o no las pruebas que nosotros hayamos especificado. Todo esto se realiza sin intervenciónalguna o código adicional del desarrollador.

Page 93: Módulo_11_Aplicaciones Web con ASP

Propiedad IsValid de control Validation

Aunque gran parte de esa funcionalidad se realiza automáticamente, hay muchas cosas que deberánrealizarse tras bambalinas para que funcionen estos controles.

<body><form id=”Form1” method=”post” runat=”server”><asp:Panel id=”Panel1” runat=”server”>Introduce tu Nombre<asp:TextBox id=”txtNombre” runat=”server” ></asp:TextBox><br><asp:Button id=”btAceptar” runat=”server” Text=”aceptar”></asp:Button><br><asp:RequiredFieldValidator id=” RequiredFieldValidator1” runat=”server” >ErrorMessage=”El nombre debe ser obligatorio” ControlToValidate=”txtNombre”> </asp:RequiredFieldValidator ></asp:Panel></form></body>

Cuando se envía el formulario, se ejecuta el método clic del botón la propiedad Page.IsValid garantiza quese cumplan todos los controles de validación de la página.

También podremos verificar cada propiedad IsValid de cada control, pero es más fácil de este modo.

Si se captura cualquier dato en el cuadro de texto, se cumple con RequieredFieldValidator.

Este control sólo verifica si un campo contiene datos. Todo control Validation contiene una propiedad IsValidque indica si la validación es correcta. En tal caso, si el usuario teclea cualquier dato, esta propiedad seestablecerá en True. De otro modo, será False.

Uso de controles de validación

Todos los controles Validation comparten propiedades similares. Todos los controles deben contener lapropiedad ControlToValidate, que establece el nombre del control de servidor que deberá ser vigilado paraeste validador. También deberá tener una propiedad ErrorMessage que indica a ASP.NET el mensaje pormostrar al usuario si falla la validación.

CONTROLES WEB PARA VALIDACIÓN DE DATOS

11

Page 94: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

12

Para nuestros cuadros de texto necesitamos asegurarnos que se teclee algo,siempre y cuando sea texto. Esta validación requiere el controlRequiredFieldValidator. Para mayor seguridad, también se puede comprobarel que varias cajas de texto no tengan el mismo contenido. Para elloutilizamos CompareValidator.

Otros controles de validación

RegularExpressionValidator

RegularExpressionValidator realizará esta función tan característica de correo, para asegurar el [email protected].

RangeValidator

RangeValidator sirve para permitir sólo usuarios de cierta región (códigos postales).

CompareValidator

CompareValidator puede comparar el valor de un control de servidor con una constante, o con otro controlde servidor. La propiedad Type indica a ASP.NET el tipo de valores que comparará, como String, Double,DateTime… Operador indica el tipo de comparación de deberá hacerse. Tendrá las propiedadesControlToValidate y ErrorMessage.

Lista de operadores y tipos adecuados para usarse con CompareValidator

La lista de operadores y tipos adecuados para usarse con CompareValidator, con la propiedad Operador, esla siguiente.

Page 95: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

13

Los tipos que pueden usarse en la propiedad Type de CompareValidator, son:

Control RegularExpressionValidator

El control RegularExpressionValidator, verifica si lo que el usuario capturócoincide con un patrón de caracteres. La única propiedad nueva de estecontrol es ValidationExpression¸ que establece la expresión que deberáutilizarse para validar el texto. En este caso, la cadena \w+\@\w+\.com setraduce en uno o varios caracteres textuales, seguidos del símbolo @, luegode uno o varios caracteres textuales, seguido de .com.

El control RangeValidator verifica si el valor del control se encuentra en elrango que se indica. Podemos comparar incluso fechas y cadenas con estecontrol. La propiedad MinimumValue y MaximumValue indica los límites denuestros rangos. Debemos incluir la propiedad Type y establecerla a String,ya que los datos se recuperan como cadenas de caracteres y si recogemosnúmeros los podría interpretar de manera inadecuada.

Establecer patrones con el control RegularExpressionValidator

El control RegularExpressionValidator, se utiliza para validar una cadena. Podemos establecer patrones, ovarios patrones para comparar, con el símbolo | (que significa “o”) en la propiedad ValidationExpression.

Page 96: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

14

La siguiente cadena comprueba cualquier número de teléfono que tenga siete números con guiones, 10 conguiones o 10 sin guiones:

([0-9]{3}-[0-9]{4}) | ([0-9]{3}-[0-9]{3}-[0-9]{4}) | ([0-9]{10})

Sólo el control RequieredFieldValidator considera inválido a un campo en blanco. Todos los demás controlesaceptan campos vacíos. Esto significa que, a pesar de que un campo se deje en blanco, la verificación conRegularExpressionValidator lo dará por bueno y su propiedad IsValid devolverá Trae. El validator no evitaráque el formulario se procese aun cuando no hay dato alguno en el campo. Deberemos utilizar el controlRequieredFieldValidator además de los otros validadores si deseamos verificar que haya contenido.

Page 97: Módulo_11_Aplicaciones Web con ASP

CONTROLES WEB PARA VALIDACIÓN DE DATOS

15

2. Resumen

Has llegado al final de esta lección de formación que denominamos “Controles Web para validación de datos”. En esta lección hemos estudiado los siguientes contenidos:

Page 98: Módulo_11_Aplicaciones Web con ASP

MANTENIMIENTO DEL ESTADO EN APLICACIONES ASP.NET

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 99: Módulo_11_Aplicaciones Web con ASP

Utilización del objeto ViewState

Es habitual tener que parar temporalmente una aplicación ASP.NET para realizar tareas de mantenimiento.En este caso se necesita habilitar una página que le informe al usuario de que la aplicación estatemporalmente fuera de servicio.

La forma más practica consiste en el uso del fichero App_Offline.htm, la colocación de un fichero con estenombre en el root de la aplicación, provoca que el runtime de ASP responda a cualquier solicitud con elcontenido del fichero App_Offline.htm.

El borrado del fichero App_Offline.htm restablece de forma automática el funcionamiento.En este ficherose guarda el mensaje para el usuario.

Este recurso fue introducido en la versión 2 de ASP.NET y es de gran ayuda para el mantenimiento deentornos en producción.

ViewState y persistencia del modelo de objetos CrystalReportViewer

ViewState es un enfoque basado en explorador de ASP.NET para conservar el estado de la vista - el formularioWeb Forms-. Su función principal es apoyar la persistencia de los controles Web.

Los controles Web (también denominados controles de servidor Web) se crean basándose en los controles deWindows, que se presentan en Visual Basic. Los controles de Windows son objetos del formulario queencapsulan una parte de la funcionalidad de presentación, como un campo de texto, un botón o una tablade datos.

APLICACIONES WEB CON ASP.NET

2

Page 100: Módulo_11_Aplicaciones Web con ASP

Los controles Web son parecidos a los controles de Windows. Al igual que los controles de Windows, funcionanen dos niveles: dentro de la página Web y en la clase de código subyacente que respalda la página Web. Delmismo modo que los controles tradicionales en Windows Forms, los controles Web encapsulan elementosconcretos de funcionalidad de presentación en objetos de GUI: Button, TextField, DropDownList, DataGrid,etc. En la clase de código subyacente, estos mismos controles se comparan con las clases que exponenpropiedades y métodos.

La diferencia entre una página Web y un formulario Windows Form es que la primera es un entornoindependiente. Así, se necesita algún tipo de mecanismo de persistencia para conservar el estado de lapágina Web durante sus recargas.

ViewState mantiene el estado de los controles de la página Web, tanto como Session

Puesto que ViewState almacena el estado de los datos de los controles Web en la página, todo el objetoViewState debe estar contenido en la página cuando ésta se transfiere una y otra vez entre el explorador yel servidor Web. Este proceso se lleva a cabo cifrando todo el objeto ViewState como cadena y, acontinuación, colocando esta cadena dentro del valor de una etiqueta de formulario oculta en la página. Porejemplo, ViewState para la página Web de ASP.NET que contiene sólo un único control de botón tiene elsiguiente código HTML:

<input type=”hidden” name=”__VIEWSTATE”value=”dDwtNTMwNzcxMzI0Ozs+I7GfLyg3p44eTLFCiVEiRKUBzFw=” />

ViewState almacena sólo información que se puede convertir a formato de cadena.

Persistencia de la presentación del informe del control CrystalReportViewer

El control CrystalReportViewer desempeña la función de presentación del informe para un informe de Crystal.Presenta el informe en html en la página junto con una barra de herramientas y una vista de árbol paramanipular la presentación del informe. La barra de herramientas contiene botones para acercar y alejar,pasar a la siguiente página, imprimir, exportar, etc. La vista de árbol se expande para mostrar agrupamientosde datos anidados.

ViewState conserva la información del control; por tanto, conserva el estado de toda la información depresentación del informe (incluidos los eventos de la barra de herramientas y la vista de árbol) del controlCrystalReportViewer durante las recargas de página.

APLICACIONES WEB CON ASP.NET

3

Page 101: Módulo_11_Aplicaciones Web con ASP

Si un usuario estuviese viendo la página 3 del informe e hiciese clic en el botón de página siguiente de la barrade herramientas del control CrystalReportViewer, ViewState conservaría el estado de ambas partes de lainformación:

- El número de página actual. - El estado del botón Página siguiente (en el que se ha hecho clic).

Durante la recarga de la página, ViewState restauraría el control CrystalReportViewer en la página 3 y, acontinuación, haría lo mismo con el clic del evento de la siguiente página para que el control se mueva a lapágina 4 del informe.

Persistencia del modelo de objetos del control CrystalReportViewer

El control CrystalReportViewer lleva a cabo una función adicional: no sólo la visualización de informes, sinotambién un modelo de objetos limitado (incluido en la clase de control CrystalReportViewer). Este modelode objetos limitado se puede utilizar para la interacción mediante programación con el informe.

ViewState conserva el estado de ambas funciones:

- La presentación del informe. - El modelo de objetos CrystalReportViewer

Se suele desaconsejar el uso del modelo de objetos CrystalReportViewer, en favor del modelo de objetosReportDocument más completo. Este modelo de objetos alternativo no está contenido en el control sino queforma parte de las bibliotecas de clases del SDK.

Compartir los mecanismos de persistencia

Si utiliza el control CrystalReportViewer para desempeñar ambas funciones (presentación del informe ymodelo de objetos), ViewState las conserva, y no necesita mecanismos de persistencia adicionales.

Sin embargo, si prefiere utilizar el control CrystalReportViewer sólo para la función de presentación deinformes y, a continuación, enlazar el control a un modelo de objetos externo (como ReportDocument), esnecesario un mecanismo de persistencia independiente para conservar dicho modelo de objetos externo.Normalmente, este segundo mecanismo de persistencia es Session (u ocasionalmente, Cache).

APLICACIONES WEB CON ASP.NET

4

Page 102: Módulo_11_Aplicaciones Web con ASP

2. Datos de sesión y aplicación

Información general sobre el estado de sesión de ASP.NET

El estado de sesión de ASP.NET permite almacenar y recuperar valores de un usuario cuando el usuario navegaen las páginas ASP.NET de una aplicación web. HTTP es un protocolo sin estado. Esto significa que un servidorweb trata cada solicitud HTTP para una página como una solicitud independiente. El servidor no retieneningún conocimiento de los valores de variables utilizados en las solicitudes anteriores. El estado de sesiónde ASP.NET identifica como sesión las solicitudes procedentes del mismo explorador durante un tiempolimitado y proporciona un método para mantener los valores de las variables durante esa sesión. Por defecto,el estado de sesión de ASP.NET se habilita en todas las aplicaciones ASP.NET.

Entre las alternativas al estado de sesión se encuentran las siguientes:

- Estado de aplicación, que almacena variables a las que pueden tener acceso todos los usuarios de unaaplicación ASP.NET.

- Propiedades de perfil, que conservan los valores de usuario en un almacén de datos sin que expiren.- Almacenamiento en caché de ASP.NET, que almacena los valores en memoria disponible para todas

las aplicaciones ASP.NET.- Estado de vista, que conserva los valores de una página.- Cookies.

La cadena y los campos de consulta de un formulario HTML que están disponibles desde una solicitud HTTP..

Variables de sesión

Las variables de sesión se almacenan en un objeto SessionStateItemCollection que se expone a través de lapropiedad HttpContextSession.

En una página ASP.NET, las variables de sesión actuales se exponen a través de la propiedad Session del objetoPage.

La colección de las variables de sesión está indizada por el nombre de la variable o por un índice de enteros.Las variables de sesión se crean estableciendo referencias a la variable de sesión por el nombre. No necesitadeclarar una variable de sesión ni agregarla explícitamente a la colección. En el siguiente ejemplo se muestracómo se crean las variables de sesión en una página ASP.NET para representar el nombre y el apellido de unusuario y cómo se establecen en valores recuperados de controles TextBox.

APLICACIONES WEB CON ASP.NET

5

Page 103: Módulo_11_Aplicaciones Web con ASP

Visual Basic

Session(“FirstName”) = FirstNameTextBox.TextSession(“LastName”) = LastNameTextBox.Text

C#

Session[“FirstName”] = FirstNameTextBox.Text;Session[“LastName”] = LastNameTextBox.Text;Las variables de sesión pueden ser cualquier tipo .NET Framework válido. El ejemplo siguiente almacena unobjeto ArrayList en una variable de sesión denominada StockPicks. El valor devuelto por la variable de sesiónStockPicks se debe convertir al tipo adecuado al recuperarlo de SessionStateItemCollection.

Visual Basic

‘ When retrieving an object from session state, cast it to ‘ the appropriate type.Dim stockPicks As ArrayList = CType(Session(“StockPicks”), ArrayList)

‘ Write the modified stock picks list back to session state.Session(“StockPicks”) = stockPicks

C#// When retrieving an object from session state, cast it to // the appropriate type.ArrayList stockPicks = (ArrayList)Session[“StockPicks”];

// Write the modified stock picks list back to session state.Session[“StockPicks”] = stockPicks;

Identificadores de sesión

Las sesiones se identifican mediante un identificador de sesión exclusivo que se puede leer con la propiedadSessionID. Cuando el estado de sesión se habilita en una aplicación ASP.NET, cada solicitud de una página dela aplicación se examina en busca de un valor SessionID enviado desde el explorador. Si no se proporciona

APLICACIONES WEB CON ASP.NET

6

Page 104: Módulo_11_Aplicaciones Web con ASP

ningún valor SessionID, ASP.NET inicia una nueva sesión y el valor SessionID de esa sesión se envía alexplorador con la respuesta.

Por defecto , los valores de SessionID se almacenan en una cookie. Sin embargo, también puede configurarla aplicación para almacenar los valores de SessionID en la dirección URL de una sesión “sin cookies”.

Una sesión se considera activa siempre que las solicitudes continúen llevándose a cabo con el mismo valorSessionID. Si el tiempo entre las solicitudes de una determinada sesión supera el valor de tiempo de esperaespecificado en minutos, se considera que la sesión ha expirado. Si se realizan solicitudes con un valor deSessionID que ha expirado, se inicia una nueva sesión.

Nota de seguridad:

Los valores de la propiedad P:System.Web.SessionState.HttpSessionState.SessionID se envían entexto no cifrado a través de una cookie o como parte de la dirección URL. Un usuariomalintencionado podría tener acceso a la sesión de otro usuario al obtener el valor de SessionIDe incluirlo en solicitudes que se envían al servidor. Si almacena información confidencial en elestado de sesión, se recomienda que use SSL para cifrar cualquier comunicación entre elexplorador y el servidor que incluya el valor de SessionID.

Identificadores de sesión sin cookies

De forma predeterminada, el valor de SessionID se almacena en una cookie de sesión sin límite de tiempoen el explorador. Sin embargo, puede especificar que estos identificadores de sesión no se almacenen en unacookie; para ello, establezca el atributo cookieless en true en la sección sessionState del archivo Web.config.En el ejemplo siguiente se muestra un archivo Web.config que configura una aplicación ASP.NET para queutilice los identificadores de la sesión sin cookies.

<configuration><system.web>

<sessionState cookieless=”true”regenerateExpiredSessionId=”true” />

</system.web></configuration>

APLICACIONES WEB CON ASP.NET

7

Page 105: Módulo_11_Aplicaciones Web con ASP

ASP.NET mantiene el estado de sesión sin cookies mediante la inserción automática de un Id. de sesión únicoen la dirección URL de la página. Por ejemplo, ASP.NET ha modificado la siguiente dirección URL para incluirel id. de sesión único lit3py55t21z5v55vlm25s55:

Cuando ASP.NET envía una página al explorador, modifica cualquier vínculo de la página que use una ruta deacceso relativa a la aplicación mediante la incrustación de un valor de identificador de sesión en los vínculos.(Los vínculos con rutas de acceso absolutas no se modifican.) El estado de sesión se mantiene en tanto queel usuario hace clic en los vínculos modificados de esta manera. Sin embargo, si el cliente vuelve a escribiruna dirección URL proporcionada por la aplicación, es posible que ASP.NET no pueda resolver el identificadorde la sesión y asocie la solicitud a una sesión existente. En este caso, se inicia una nueva sesión para lasolicitud.

El Id. de sesión se incrusta en la dirección URL detrás de la barra diagonal que sigue al nombre de la aplicacióny delante de cualquier otro identificador de archivo o de directorio virtual. De esta forma, ASP.NET puederesolver el nombre de la aplicación antes de implicar a SessionStateModule en la solicitud.

Volver a generar los identificadores de sesión caducados

Por defecto, los valores del identificador de sesión que se usan en sesiones sin cookies se reciclan. Es decir,si una solicitud se efectúa con un identificador de sesión que ha expirado, se inicia una nueva sesión que usael valor de SessionID proporcionado con la solicitud. Esto puede producir una sesión compartida de formainvoluntaria, si varios exploradores usan un vínculo que contiene un valor de SessionID sin cookies. (Puedesuceder si el vínculo se envía a través de un motor de búsqueda, a través de un mensaje de correo electrónicoo a través de otro programa.) Puede reducir la posibilidad de que los datos de la sesión se compartan siconfigura la aplicación para que no recicle los identificadores de sesión. Para eso, establezca el atributoregenerateExpiredSessionId del elemento de configuración sessionState en true. Así se generará un nuevoidentificador de sesión cuando se efectúe una solicitud de sesión sin cookies mediante un identificador desesión que ha expirado.

Identificadores de sesión personalizados

Puede implementar una clase personalizada para proporcionar y validar los valores de SessionID. Para esto,cree una clase que herede de la clase SessionIDManager e invalide los métodos CreateSessionID y Validatecon sus propias implementaciones. Para obtener un ejemplo, vea el ejemplo que se incluye en el métodoCreateSessionID.

APLICACIONES WEB CON ASP.NET

8

Page 106: Módulo_11_Aplicaciones Web con ASP

Puede reemplazar la clase SessionIDManager completa mediante la creación de una clase que implementela interfaz ISessionIDManager. Por ejemplo, puede tener una aplicación Web que asocie un identificador únicocon páginas que no sean ASP.NET (como imágenes páginas HTML) mediante un filtro ISAPI. Puede implementaruna clase SessionIDManager personalizada para utilizar este identificador único con el estado de sesión deASP.NET. Si la clase personalizada admite identificadores de sesión sin cookies, debe implementar unasolución para enviar y recuperar los identificadores de sesión de la dirección URL.

Modos de sesión

El estado de sesión de ASP.NET es compatible con distintas opciones de almacenamiento de las variables desesión. Cada opción se identifica como un tipo de Mode del estado de sesión. El comportamientopredeterminado consiste en almacenar las variables de sesión en el espacio de memoria del proceso detrabajo de ASP.NET. Sin embargo, también puede especificar que el estado de sesión se debe almacenar enun proceso diferente, en una base de datos de SQL Server o en un origen de datos personalizado. Si no deseaque el estado de sesión esté habilitado en su aplicación, puede establecer el modo de sesión en Off.

Eventos de sesión

ASP.NET proporciona dos eventos que le ayudan a administrar las sesiones de usuario. El eventoSession_OnStart se provoca cuando se inicia una nueva sesión y el evento Session_OnEnd cuando una sesiónse abandona o expira. Los eventos de sesión se especifican en el archivo Global.asax de una aplicaciónASP.NET.

El evento Session_OnEnd no se admite si la propiedad Mode de la sesión se establece en un valor distintode InProc, que es el modo predeterminado.

Configurar el estado de sesión

El estado de sesión se configura mediante sessionState de la sección de configuración de system.web.También puede configurar el estado de sesión mediante el valor de EnableSessionState en la directiva@ Page.

El elemento sessionState permite especificar las opciones siguientes:

- El modo en que la sesión almacenará los datos.- La manera en que los valores de identificador de sesión se envían entre el cliente y el servidor.- El valor de Timeout de la sesión.- Los tipos que se admiten se basan en la configuración de Mode de la sesión.

APLICACIONES WEB CON ASP.NET

9

Page 107: Módulo_11_Aplicaciones Web con ASP

Aquí se ve como un elemento sessionState que configura una aplicación para el modo de sesión SQLServer.Establece el valor Timeout en 30 minutos y especifica que los identificadores de sesión se almacenan en ladirección URL.

<sessionState mode=”SQLServer”cookieless=”true “regenerateExpiredSessionId=”true “timeout=”30”sqlConnectionString=”Data Source=MySqlServer;Integrated Security=SSPI;”stateNetworkTimeout=”30”/>

Puede deshabilitar el estado de sesión en una aplicación estableciendo el modo de estado de sesión en Off.Si desea deshabilitar el estado de sesión solamente en una determinada página de una aplicación, puedeestablecer el valor de EnableSessionState en la directiva @ Page en false. El valor EnableSessionState tambiénse puede establecer en ReadOnly para proporcionar acceso de sólo lectura a las variables de sesión.

Solicitudes simultáneas y estado de sesión

El acceso al estado de sesión de ASP.NET es exclusivo para cada sesión, lo que significa que si dos usuariosdiferentes realizan solicitudes simultáneas, se concederá simultáneamente acceso a dos sesiones diferentes.Sin embargo, si se crean dos solicitudes simultáneas para la misma sesión (con el mismo valor de SessionID),la primera solicitud obtiene el acceso exclusivo a la información de la sesión. La segunda solicitud sólo seejecuta una vez finalizada la primera. (La segunda sesión también puede obtener acceso si se libera elbloqueo exclusivo de la información porque la primera solicitud supera el tiempo de espera del bloqueo.) Siel valor de EnableSessionState de la directiva @ Page se establece en ReadOnly, una solicitud de lainformación de sesión de sólo lectura no produce un bloqueo exclusivo de los datos de la sesión. Sin embargo,es posible que las solicitudes de sólo lectura de los datos de sesión aún tengan que esperar a que se libereel bloqueo existente en una solicitud de lectura y escritura para los datos de la sesión.

Referencia de clase

La tabla siguiente enumera las clases clave que se relacionan con el estado de sesión incluidas en el espaciode nombres System.Web.SessionState.

APLICACIONES WEB CON ASP.NET

10

Page 108: Módulo_11_Aplicaciones Web con ASP

Información general sobre el estado de aplicación de ASP.NET

El estado de aplicación es un repositorio de datos disponible para todas las clases de una aplicación ASP.NET.El estado de aplicación se almacena en la memoria del servidor y ofrece más rapidez que el almacenamientoy la recuperación de información de una base de datos. El estado de aplicación se aplica a todos los usuariosy a todas las sesiones. Es un lugar útil para almacenar pequeñas cantidades de datos utilizados a menudo queno cambian de un usuario a otro.

Utilizar el estado de aplicación

El estado de aplicación se almacena en una instancia de la clase HttpApplicationState. Esta clase expone undiccionario de objetos con valores y claves.

La instancia de HttpApplicationState se crea la primera vez que el usuario tiene acceso a cualquier recursode dirección URL de la aplicación. A la clase HttpApplicationState se suele tener acceso a través de lapropiedad Application de la clase HttpContext.

El estado de aplicación se puede utilizar de dos maneras. Puede agregar o quitar valores de la colecciónContents, u obtener acceso a ellos, directamente a través del código. A la clase HttpApplicationState sepuede tener acceso en cualquier momento durante la vida de la aplicación. Suele ser útil cargar los datosdel estado de aplicación cuando se inicia la aplicación. Puede colocar código para cargar el estado deaplicación en el método Application_Start del archivo Global.asax.

Puede agregar objetos a la colección StaticObjects a través de una declaración <object runat=”server”> enel archivo Global.asax de la aplicación Web. Se puede tener acceso al estado de aplicación definido de estamanera desde el código situado en cualquier lugar de la aplicación. En el ejemplo siguiente se muestra ladeclaración de un objeto para un valor de estado de aplicación:

<object runat=”server” scope=”application” ID=”MyInfo” PROGID=”MSWC.MYINFO”>

</object>

Los objetos sólo se pueden agregar a la colección StaticObjects en el archivo Global.asax. Si intentaagregarlos directamente a través del código, la colección producirá una excepción NotSupportedException.Puede tener acceso a los miembros de los objetos almacenados en el estado de aplicación sin tener quehacer referencia a la colección Application. Mostremos cómo hacer referencia a un miembro de un objetodefinido en la colección StaticObjects del estado de aplicación:

APLICACIONES WEB CON ASP.NET

11

Page 109: Módulo_11_Aplicaciones Web con ASP

Visual Basic

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)Label1.Text = MyInfo.Title

End SubC#protected void Page_Load(Object sender, EventArgs e)

Label1.Text = MyInfo.Title;End Sub

Consideraciones sobre el estado de aplicación

Cuando utilice el estado de aplicación, debe tener en cuenta las consideraciones importantes siguientes:

Recursos Dado que se almacena en memoria, el estado de aplicación es muy rápido comparado conel almacenamiento de los datos en un disco o en una base de datos. Sin embargo, si se almacenangrandes bloques de datos en el estado de aplicación, se puede llenar la memoria del servidor, haciendoque éste tenga que guardar páginas de memoria en el disco. Como alternativa al uso del estado deaplicación, puede utilizar el mecanismo de almacenamiento en memoria caché de ASP.NET paraalmacenar grandes cantidades de datos de la aplicación. La caché de ASP.NET también almacena losdatos en memoria y, por lo tanto, es muy rápida. Sin embargo, ASP.NET administra activamente lacaché y quitará elementos cuando la memoria sea escasa.

Volatilidad Dado que el estado de aplicación se almacena en la memoria del servidor, se pierde cadavez que se detiene o se reinicia la aplicación. Por ejemplo, si se modifica el archivo Web.config, sereiniciará la aplicación y se perderá todo el estado de aplicación a menos que los valores de estadode aplicación se hayan escrito en un medio de almacenamiento no volátil, por ejemplo una base dedatos.

Escalabilidad El estado de aplicación no se comparte entre múltiples servidores que sirven la mismaaplicación, como en una batería de servidores Web, ni entre múltiples procesos de trabajo que sirvenla misma aplicación en el mismo servidor, como en un hospedaje multiproceso en un único equipo. Porlo tanto, la aplicación no puede depender del estado de aplicación que contiene los mismos datospara el estado de aplicación a través de servidores o procesos diferentes. Si la aplicación se va aejecutar en entornos de multiprocesador o multiservidor, puede utilizar una opción más escalable,como una base de datos, para los datos que deban conservarse idénticos durante toda la ejecución dela aplicación.

APLICACIONES WEB CON ASP.NET

12

Page 110: Módulo_11_Aplicaciones Web con ASP

Concurrencia El estado de aplicación es de subprocesamiento libre, lo que significa que variossubprocesos pueden tener acceso a los datos al mismo tiempo. Por consiguiente, es importanteasegurarse de que al actualizar los datos del estado de aplicación se haga de una manera segura parasubprocesos incluyendo la compatibilidad con la sincronización integrada. Puede utilizar los métodosLock y UnLock para garantizar la integridad de los datos bloqueándolos de manera que sólo un origenpueda escribir datos cada vez. También puede reducir la posibilidad de que surjan problemas deconcurrencia inicializando los valores del estado de aplicación en el método Application_Start delarchivo Global.asax.

APLICACIONES WEB CON ASP.NET

13

Page 111: Módulo_11_Aplicaciones Web con ASP

3. Utilización de cookies

Una cookie es un fragmento de texto que acompaña a las solicitudes y a las páginas mientras éstas setransmiten del servidor Web al explorador y viceversa. La cookie contiene información que la aplicación Webpuede leer cada vez que el usuario visita el sitio.

Las cookies proporcionan un medio para almacenar información específica del usuario en las aplicacionesWeb. Cuando un usuario visita un sitio, las cookies pueden emplearse para almacenar las preferencias delusuario u otra información. Cuando el usuario visite el sitio Web de nuevo, la aplicación podrá recuperar lainformación que almacenó previamente.

Una cookie es un pequeño fragmento de texto que acompaña a las solicitudes y a las páginas mientras éstasse transmiten del servidor Web al explorador y viceversa. La cookie contiene información que la aplicaciónWeb puede leer cada vez que el usuario visita el sitio.

Si un usuario solicita una página de un sitio y la aplicación no solo envía una página, sino también una cookieque contiene la fecha y la hora, cuando el explorador del usuario obtenga la página, también obtendrá lacookie, que se almacenará en una carpeta en el disco duro del usuario.

Si el usuario solicita de nuevo una página del mismo sitio, cuando introduzca la dirección URL, el exploradorbuscará en el disco duro local una cookie asociada a dicha dirección. Si la cookie existe, el explorador laenviará al sitio junto con la solicitud de la página. La aplicación podrá determinar la fecha y hora en que elusuario visitó el sitio por última vez. Podría usar dicha información para mostrar un mensaje al usuario ocomprobar una fecha de expiración.

APLICACIONES WEB CON ASP.NET

14

Page 112: Módulo_11_Aplicaciones Web con ASP

Las cookies están asociadas a un sitio Web, no a una página específica, por lo que el explorador y el servidorintercambiarán información de cookies independientemente de la página que el usuario solicite en su sitio.Todos los sitios que visita el usuario pueden enviar una cookie al explorador del usuario; éste las almacenaráindependientemente.

Las cookies permiten a los sitios Web almacenar información sobre los visitantes. De forma más general, lascookies son una manera de mantener la continuidad en una aplicación Web, es decir, de realizar laadministración de estados. Excepto durante los breves momentos en los que están realmente intercambiandoinformación, el explorador y el servidor Web están desconectados. Las solicitudes que realiza un usuario aun servidor Web se tratan por separado unas de las otras. Es útil para el servidor Web reconocer a los usuarioscuando solicitan una página. El servidor Web de un sitio de compras efectúa el seguimiento de cada uno delos compradores para poder administrar los carros de la compra y la información específica del usuario. Unacookie actúa como una especie de tarjeta de llamada, que presenta la identificación necesaria para que laaplicación sepa cómo continuar.

Las cookies se utilizan para muchos propósitos, todos ellos destinados a facilitar al sitio Web elreconocimiento de los usuarios. Un sitio que lleva a cabo un sondeo podría utilizar una cookie simplementecomo un valor booleano para indicar si el explorador del usuario ya ha participado en la votación, a fin deevitar que el usuario vote dos veces. Un sitio que solicita a un usuario que inicie una sesión podría utilizaruna cookie para registrar dicho inicio de sesión a fin de que el usuario no tenga que seguir proporcionandosus credenciales.

Limitaciones de las cookies

La mayoría de los exploradores admiten cookies de un tamaño máximo de 4096 bytes. Debido a este límite,es recomendable utilizar las cookies para almacenar pequeñas cantidades de datos, o mejor aún, unidentificador como un id. de usuario. Este id. se puede utilizar para identificar al usuario y leer informaciónrelativa a éste de una base de datos u otro almacén de datos.

Los exploradores también imponen limitaciones respecto al número de cookies que cada sitio puedealmacenar en el equipo del usuario. La mayoría de los exploradores sólo permiten 20 cookies por sitio; si seintenta almacenar más, las cookies más antiguas se descartan. Algunos exploradores también definen unlímite absoluto, normalmente 300, en cuanto al número de cookies que aceptan desde todos los sitios enconjunto.

Una limitación de las cookies con la que podría encontrarse es que los usuarios pueden configurar susexploradores para rechazarlas. Si define una directiva de privacidad P3P y la coloca en la raíz de su sitio Web,

APLICACIONES WEB CON ASP.NET

15

Page 113: Módulo_11_Aplicaciones Web con ASP

habrá más exploradores que acepten cookies de su sitio. Sin embargo, podría ser necesario evitar porcompleto las cookies y utilizar otro mecanismo para almacenar información específica del usuario. Un métodocomún para almacenar información sobre el usuario es el estado de sesión, pero éste depende de las cookies.Aunque las cookies pueden ser muy útiles en su aplicación, ésta no debería depender exclusivamente deellas. No las utilice para implementar características importantes. Si su aplicación debe depender de lascookies, puede comprobar si el explorador las aceptará.

Escribir cookies

En un sistema de usuario, el explorador es el responsable de la administración de las cookies. Éstas se envíanal explorador a través del objeto HttpResponse, que expone una colección denominada Cookies. Puede teneracceso al objeto HttpResponse como la propiedad Response de la clase Page. Las cookies que desee enviaral explorador se deben agregar a esta colección. Al crear una cookie, debe especificar las propiedades Namey Value. Cada una de las cookies debe tener un nombre único a fin de que después se las pueda identificaral leerlas desde el explorador. Dado que las cookies se almacenan por nombre, asignar el mismo nombre ados cookies ocasionará que una de ellas se sobrescriba.

También se puede establecer la fecha y hora de expiración de una cookie. El explorador elimina las cookiesexpiradas cuando un usuario visita el sitio que las escribió. La expiración de una cookie debería establecerseen función del tiempo que su aplicación considere que el valor de la misma seguirá siendo válido. Para queuna cookie no expire nunca, puede establecer la fecha de expiración en 50 años a partir de ahora.

Si no establece la expiración de la cookie, ésta se crea pero no se almacena en el disco duro del usuario. Ensu lugar, la cookie se mantiene como parte de la información de sesión del usuario. Cuando el usuario cierrael explorador, la cookie se descarta. Una cookie no persistente de este tipo resulta útil para la informaciónque se debe almacenar durante períodos cortos de tiempo o que, por motivos de seguridad, no se deberíaescribir en el disco del equipo cliente. Las cookies no persistentes son útiles si el usuario está trabajando enun equipo público en cuyo disco no desea que se escriba la cookie.

APLICACIONES WEB CON ASP.NET

16

Page 114: Módulo_11_Aplicaciones Web con ASP

Puede agregar cookies a la colección Cookies de varias maneras. Véase como escribir cookies:

Visual Basic

Response.Cookies(“userName”).Value = “patrick”Response.Cookies(“userName”).Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie(“lastVisit”)aCookie.Value = DateTime.Now.ToString()aCookie.Expires = DateTime.Now.AddDays(1)Response.Cookies.Add(aCookie)C#Response.Cookies[“userName”].Value = “patrick”;Response.Cookies[“userName”].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie(“lastVisit”);aCookie.Value = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);

Se agrega dos cookies a la colección Cookies, una denominada userName y la otra denominada lastVisit. Parala primera cookie, los valores de la colección Cookies se establecen directamente. Puede agregar valores ala colección de esta forma porque Cookies se deriva de una colección especializada de tipoNameObjectCollectionBase.

Para la segunda cookie, el código crea una instancia de un objeto de tipo HttpCookie, establece suspropiedades y, a continuación, lo agrega a la colección Cookies a través del método Add. Cuando se crea unainstancia de un objeto HttpCookie, se debe pasar el nombre de la cookie como parte del constructor.

Ambos ejemplos llevan a cabo la misma tarea: escriben una cookie en el explorador. En ambos métodos, elvalor de expiración debe ser de tipo DateTime. El valor lastVisited también es un valor de fecha y hora. Dadoque todos los valores de las cookies se almacenan como cadenas, el valor de fecha y hora se tiene queconvertir en un objeto String.

APLICACIONES WEB CON ASP.NET

17

Page 115: Módulo_11_Aplicaciones Web con ASP

Cookies con varios valores

Puede almacenar un valor en una cookie, como el nombre de usuario y la última visita. También puedealmacenar varios pares de nombre y valor en una sola cookie. Estos pares de nombre y valor se denominansubclaves. (Las subclaves se disponen de forma similar a una cadena de consulta en una dirección URL.) Enlugar de crear dos cookies independientes denominadas userName y lastVisit, puede crear una sola cookiedenominada userInfo que tenga las subclaves userName y lastVisit.

Son varias las razones que hacen aconsejable el uso de subclaves. En primer lugar, es conveniente colocar lainformación relacionada o similar en una sola cookie. Además, dado que toda la información está en una solacookie, los atributos de ésta, como la expiración, se aplican a toda la información. (A la inversa, si deseaasignar distintas fechas de expiración a distintos tipos de información, debería almacenar ésta en cookiesindependientes.)

Además, una cookie con subclaves también le ayudará a limitar el tamaño de los archivos de cookies. Tal ycomo se ha indicado en la sección “Limitaciones de las cookies”, las cookies generalmente están limitadasa 4096 bytes y no se pueden almacenar más de 20 cookies por sitio. Si utiliza una sola cookie con subclaves,empleará menos de las 20 cookies asignadas a su sitio. Además, una sola cookie ocupa unos 50 caracteres parala sobrecarga (información de expiración, etc.), más la longitud del valor que almacene en ella, cantidadesque hay que restar del límite de 4096 bytes. Si almacena cinco subclaves en lugar de cinco cookiesindependientes, evita la sobrecarga de las cookies independientes y puede ahorrar alrededor de 200 bytes. Para crear una cookie con subclaves, puede utilizar una variación de la sintaxis que se emplea para escribiruna sola cookie. A continuación se muestran dos maneras de escribir la misma cookie, cada una con dossubclaves:

Visual Basic

Response.Cookies(“userInfo”)(“userName”) = “patrick”Response.Cookies(“userInfo”)(“lastVisit”) = DateTime.Now.ToString()Response.Cookies(“userInfo”).Expires = DateTime.Now.AddDays(1)

Dim aCookie As New HttpCookie(“userInfo”)aCookie.Values(“userName”) = “patrick”aCookie.Values(“lastVisit”) = DateTime.Now.ToString()aCookie.Expires = DateTime.Now.AddDays(1)Response.Cookies.Add(aCookie)C#

APLICACIONES WEB CON ASP.NET

18

Page 116: Módulo_11_Aplicaciones Web con ASP

Response.Cookies[“userInfo”][“userName”] = “patrick”;Response.Cookies[“userInfo”][“lastVisit”] = DateTime.Now.ToString();Response.Cookies[“userInfo”].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie(“userInfo”);aCookie.Values[“userName”] = “patrick”;aCookie.Values[“lastVisit”] = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);

Controlar el ámbito de las cookies

Por defecto , todas las cookies de un sitio se almacenan juntas en el cliente y todas ellas se envían al servidorcon cualquier solicitud para ese sitio. Cada página de un sitio obtiene todas las cookies para ese sitio. Sinembargo, puede establecer el ámbito de las cookies de dos maneras:

- Limite el ámbito de las cookies a una carpeta del servidor, lo que le permitirá limitar las cookies auna aplicación del sitio.

- Establezca el ámbito en un dominio, lo que le permitirá especificar los subdominios de un dominioque pueden tener acceso a una cookie.

Limitar las cookies a una carpeta o aplicación

Para limitar las cookies a una carpeta del servidor, establezca la propiedad Path de la cookie, como en elejemplo siguiente:

Visual Basic

Dim appCookie As New HttpCookie(“AppCookie”)appCookie.Value = “written “ & DateTime.Now.ToString()appCookie.Expires = DateTime.Now.AddDays(1)appCookie.Path = “/Application1”Response.Cookies.Add(appCookie)

C#

APLICACIONES WEB CON ASP.NET

19

Page 117: Módulo_11_Aplicaciones Web con ASP

HttpCookie appCookie = new HttpCookie(“AppCookie”);appCookie.Value = “written “ + DateTime.Now.ToString();appCookie.Expires = DateTime.Now.AddDays(1);appCookie.Path = “/Application1”;Response.Cookies.Add(appCookie);

La ruta de acceso puede ser una ruta de acceso física situada bajo la raíz del sitio o una raíz virtual. Elefecto conseguido será que la cookie sólo estará disponible para las páginas de la carpeta Application1 o parala raíz virtual.

Limitar el ámbito de dominio de las cookies

Por defecto, las cookies se asocian a un dominio específico. Si su sitio es www.xxx.com, las cookies queescriba se envían al servidor cuando los usuarios solicitan una página de ese sitio. (Esto podría no incluir lascookies que tengan un valor de ruta de acceso determinado.) Si su sitio tiene subdominios, por ejemplo,contoso.com, sales.xxx.com y support.xxx.com, puede asociar las cookies a un subdominio concreto. Paraello, establezca la propiedad Domain de la cookie, como en este ejemplo:

Visual Basic

Response.Cookies(“domain”).Value = DateTime.Now.ToString()Response.Cookies(“domain”).Expires = DateTime.Now.AddDays(1)Response.Cookies(“domain”).Domain = “support.contoso.com”

C#Response.Cookies[“domain”].Value = DateTime.Now.ToString();Response.Cookies[“domain”].Expires = DateTime.Now.AddDays(1);Response.Cookies[“domain”].Domain = “support.contoso.com”;

Cuando el dominio se establece de esta manera, la cookie sólo estará disponible para las páginas delsubdominio especificado. También puede utilizar la propiedad Domain para crear una cookie que se puedacompartir entre varios subdominios, como se muestra en el ejemplo siguiente:

APLICACIONES WEB CON ASP.NET

20

Page 118: Módulo_11_Aplicaciones Web con ASP

Visual Basic

Response.Cookies(“domain”).Value = DateTime.Now.ToString()Response.Cookies(“domain”).Expires = DateTime.Now.AddDays(1)Response.Cookies(“domain”).Domain = “contoso.com”C#Response.Cookies[“domain”].Value = DateTime.Now.ToString();Response.Cookies[“domain”].Expires = DateTime.Now.AddDays(1);Response.Cookies[“domain”].Domain = “xxx.com”;

De esta manera, la cookie estará disponible para el dominio principal, así como para los dominiossales.xxx.com y support.xxx.com.

Leer las cookies

Cuando un explorador realiza una solicitud al servidor, envía las cookies para ese servidor junto con lasolicitud. En sus aplicaciones ASP.NET, puede leer las cookies mediante el objeto HttpRequest, que estádisponible como propiedad Request de la clase Page. La estructura del objeto HttpRequest es esencialmentela misma que la del objeto HttpResponse, por lo que la lectura de las cookies del objeto HttpRequest serealiza de manera similar a la escritura de las cookies en el objeto HttpResponse. Mostramos dos manerasde obtener el valor de una cookie denominada username y mostrar su valor en un control Label:

Visual Basic

If Not Request.Cookies(“userName”) Is Nothing ThenLabel1.Text = Server.HtmlEncode(Request.Cookies(“userName”).Value)

End If

If Not Request.Cookies(“userName”) Is Nothing ThenDim aCookie As HttpCookie = Request.Cookies(“userName”)Label1.Text = Server.HtmlEncode(aCookie.Value)

End IfC#Copiar códigoif(Request.Cookies[“userName”] != null)

Label1.Text = Server.HtmlEncode(Request.Cookies[“userName”].Value);

if(Request.Cookies[“userName”] != null){

HttpCookie aCookie = Request.Cookies[“userName”];Label1.Text = Server.HtmlEncode(aCookie.Value);

}

APLICACIONES WEB CON ASP.NET

21

Page 119: Módulo_11_Aplicaciones Web con ASP

Antes de intentar obtener el valor de una cookie, debería asegurarse de que dicha cookie existe; si no es así,se iniciará una excepción NullReferenceException. Tenga en cuenta también que se ha llamado al métodoHtmlEncode para codificar el contenido de una cookie antes de mostrarlo en la página. Esto garantiza queun usuario malintencionado no ha agregado un script ejecutable a la cookie. Para obtener más informaciónsobre la seguridad de las cookies, vea la sección “Las cookies y la seguridad”.

Del mismo modo, la lectura del valor de una subclave de una cookie es similar a su establecimiento. Semuestra a continuación una manera de obtener el valor de una subclave:

Visual Basic

If Not Request.Cookies(“userInfo”) Is Nothing ThenLabel1.Text = _

Server.HtmlEncode(Request.Cookies(“userInfo”)(“userName”))Label2.Text = _

Server.HtmlEncode(Request.Cookies(“userInfo”)(“lastVisit”))End If

C#if(Request.Cookies[“userInfo”] != null){

Label1.Text = Server.HtmlEncode(Request.Cookies[“userInfo”][“userName”]);

Label2.Text =Server.HtmlEncode(Request.Cookies[“userInfo”][“lastVisit”]);

}

El código lee el valor de la subclave lastVisit, que se estableció previamente en la representación de cadenade un valor DateTime. Las cookies almacenan valores en forma de cadenas, por lo que si desea utilizar elvalor lastVisit como fecha, debe convertirlo al tipo apropiado:

Visual Basic

Dim dt As DateTimedt = DateTime.Parse(Request.Cookies(“userInfo”)(“lastVisit”))C#DateTime dt;dt = DateTime.Parse(Request.Cookies[“userInfo”][“lastVisit”]);

APLICACIONES WEB CON ASP.NET

22

Page 120: Módulo_11_Aplicaciones Web con ASP

Las subclaves de una cookie son una colección de tipo NameValueCollection. Por consiguiente, otra manerade obtener una subclave determinada es obtener la colección de subclaves y, a continuación, extraer el valorde la subclave por su nombre, como se muestra en el ejemplo siguiente:

Visual Basic

If Not Request.Cookies(“userInfo”) Is Nothing ThenDim UserInfoCookieCollection As _

System.Collections.Specialized.NameValueCollectionUserInfoCookieCollection = Request.Cookies(“userInfo”).ValuesLabel1.Text = _

Server.HtmlEncode(UserInfoCookieCollection(“userName”))Label2.Text = _

Server.HtmlEncode(UserInfoCookieCollection(“lastVisit”))End If

C#if(Request.Cookies[“userInfo”] != null){

System.Collections.Specialized.NameValueCollectionUserInfoCookieCollection;

UserInfoCookieCollection = Request.Cookies[“userInfo”].Values;Label1.Text =

Server.HtmlEncode(UserInfoCookieCollection[“userName”]);Label2.Text =

Server.HtmlEncode(UserInfoCookieCollection[“lastVisit”]);}

Cambiar la fecha de expiración de una cookie

El explorador es responsable de administrar las cookies, y la fecha y hora de expiración de éstas le ayudana administrar su almacén de cookies. Aunque un usuario puede leer el nombre y el valor de una cookie, nopuede leer su fecha y hora de expiración. Cuando el explorador envía la información de las cookies al servidor,no incluye la información de expiración. ( Expires siempre devuelve un valor de fecha y hora de cero.) Si lepreocupa la fecha de expiración de una cookie, deberá restablecerla.

APLICACIONES WEB CON ASP.NET

23

Page 121: Módulo_11_Aplicaciones Web con ASP

Leer colecciones de cookies

Es posible que en algún momento necesite leer todas las cookies disponibles para la página. Para leer losnombres y los valores de todas las cookies disponibles para la página, puede recorrer la colección Cookiesmediante el siguiente código :

Visual Basic

Dim i As IntegerDim output As System.Text.StringBuilder = New System.Text.StringBuilderDim aCookie As HttpCookieFor i = 0 to Request.Cookies.Count - 1

aCookie = Request.Cookies(i)output.Append(“Cookie name = “ & Server.HtmlEncode(aCookie.Name) _

& “<br />”)output.Append(“Cookie value = “ & _

Server.HtmlEncode(aCookie.Value) & “<br /><br />”)NextLabel1.Text = output.ToString()C#System.Text.StringBuilder output = new System.Text.StringBuilder();HttpCookie aCookie;for(int i=0; i<Request.Cookies.Count; i++){

aCookie = Request.Cookies[i];output.Append(“Cookie name = “ + Server.HtmlEncode(aCookie.Name)

+ “<br />”);output.Append(“Cookie value = “ + Server.HtmlEncode(aCookie.Value)

+ “<br /><br />”);}Label1.Text = output.ToString();

APLICACIONES WEB CON ASP.NET

24

Page 122: Módulo_11_Aplicaciones Web con ASP

Si la cookie tiene subclaves, la presentación las muestra como una sola cadena de nombre y valor. Puede leerla propiedad HasKeys de una cookie para determinar si ésta tiene subclaves. En ese caso, puede leer lacolección de subclaves para obtener nombres y valores de subclaves individuales. Puede leer directamentevalores de subclaves de la colección Values por valor de índice. Los nombres de las subclavescorrespondientes están disponibles en el miembro AllKeys de la colección Values, que devuelve una matrizde cadenas. También puede utilizar el miembro Keys de la colección Values. No obstante, la propiedad AllKeysse almacena en la caché la primera vez que se tiene acceso a ella. Cada vez que se tiene acceso a lapropiedad Keys, ésta crea una matriz. Por este motivo, la propiedad AllKeys es mucho más rápida en accesosposteriores dentro del contexto de la misma solicitud de página.

Se muestra una modificación del ejemplo anterior. Se utiliza la propiedad HasKeys para comprobar laexistencia de subclaves y si éstas se detectan, se obtienen de la colección Values:

Visual Basic

Dim i As IntegerDim j As IntegerDim output As System.Text.StringBuilder = New StringBuilder()Dim aCookie As HttpCookieDim subkeyName As StringDim subkeyValue As StringFor i = 0 To Request.Cookies.Count - 1

aCookie = Request.Cookies(i)output.Append(“Name = “ & aCookie.Name & “<br />”)If aCookie.HasKeys Then

For j = 0 To aCookie.Values.Count - 1subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys(j))subkeyValue = Server.HtmlEncode(aCookie.Values(j))output.Append(“Subkey name = “ & subkeyName & “<br />”)output.Append(“Subkey value = “ & subkeyValue & _

“<br /><br />”)Next

Elseoutput.Append(“Value = “ & Server.HtmlEncode(aCookie.Value) & _

“<br /><br />”)End If

NextLabel1.Text = output.ToString()C#for(int i=0; i<Request.Cookies.Count; i++){

APLICACIONES WEB CON ASP.NET

25

Page 123: Módulo_11_Aplicaciones Web con ASP

aCookie = Request.Cookies[i];output.Append(“Name = “ + aCookie.Name + “<br />”);if(aCookie.HasKeys){

for(int j=0; j<aCookie.Values.Count; j++){

subkeyName = Server.HtmlEncode(aCookie.Values.AllKeys[j]);subkeyValue = Server.HtmlEncode(aCookie.Values[j]);output.Append(“Subkey name = “ + subkeyName + “<br />”);output.Append(“Subkey value = “ + subkeyValue +

“<br /><br />”);}

}else{

output.Append(“Value = “ + Server.HtmlEncode(aCookie.Value) +“<br /><br />”);

}}Label1.Text = output.ToString();

Se pueden extraer las subclaves como un objeto NameValueCollection, así :

Visual Basic

Dim i As IntegerDim j As IntegerDim output As System.Text.StringBuilder = New StringBuilder()Dim aCookie As HttpCookieDim subkeyName As StringDim subkeyValue As StringFor i = 0 To Request.Cookies.Count - 1

aCookie = Request.Cookies(i)output.Append(“Name = “ & aCookie.Name & “<br />”)If aCookie.HasKeys Then

Dim CookieValues As _System.Collections.Specialized.NameValueCollection = _

aCookie.ValuesDim CookieValueNames() As String = CookieValues.AllKeysFor j = 0 To CookieValues.Count - 1

subkeyName = Server.HtmlEncode(CookieValueNames(j))subkeyValue = Server.HtmlEncode(CookieValues(j))output.Append(“Subkey name = “ & subkeyName & “<br />”)

APLICACIONES WEB CON ASP.NET

26

Page 124: Módulo_11_Aplicaciones Web con ASP

output.Append(“Subkey value = “ & subkeyValue & _“<br /><br />”)

NextElse

output.Append(“Value = “ & Server.HtmlEncode(aCookie.Value) & _“<br /><br />”)

End IfNextLabel1.Text = output.ToStringC#System.Text.StringBuilder output = new System.Text.StringBuilder();HttpCookie aCookie;string subkeyName;string subkeyValue;

for (int i = 0; i < Request.Cookies.Count; i++){

aCookie = Request.Cookies[i];output.Append(“Name = “ + aCookie.Name + “<br />”);if (aCookie.HasKeys){

System.Collections.Specialized.NameValueCollection CookieValues = aCookie.Values;

string[] CookieValueNames = CookieValues.AllKeys;for (int j = 0; j < CookieValues.Count; j++){

subkeyName = Server.HtmlEncode(CookieValueNames[j]);subkeyValue = Server.HtmlEncode(CookieValues[j]);output.Append(“Subkey name = “ + subkeyName + “<br />”);output.Append(“Subkey value = “ + subkeyValue +

“<br /><br />”);}

}else{

output.Append(“Value = “ + Server.HtmlEncode(aCookie.Value) +“<br /><br />”);

}}Label1.Text = output.ToString();

APLICACIONES WEB CON ASP.NET

27

Page 125: Módulo_11_Aplicaciones Web con ASP

Modificar y eliminar las cookies

No es posible modificar directamente una cookie. En su lugar, el proceso que se debe seguir consiste encrear una nueva cookie con nuevos valores y, a continuación, enviarla al explorador para que sobrescriba laversión antigua en el cliente. Se muestra cómo modificar el valor de una cookie que almacena un recuentode las visitas del usuario al sitio:

Visual Basic

Dim counter As IntegerIf Request.Cookies(“counter”) Is Nothing Then

counter = 0Else

counter = Int32.Parse(Request.Cookies(“counter”).Value)End Ifcounter += 1Response.Cookies(“counter”).Value = counter.ToStringResponse.Cookies(“counter”).Expires = DateTime.Now.AddDays(1)

C#int counter;if (Request.Cookies[“counter”] == null)

counter = 0;else{

counter = int.Parse(Request.Cookies[“counter”].Value);}counter++;

Response.Cookies[“counter”].Value = counter.ToString();Response.Cookies[“counter”].Expires = DateTime.Now.AddDays(1);

APLICACIONES WEB CON ASP.NET

28

Page 126: Módulo_11_Aplicaciones Web con ASP

Eliminar las cookies

La eliminación de una cookie, es decir, quitarla físcamente del disco duro del usuario, es una variación delproceso de modificación. No es posible quitar directamente una cookie, ya que se encuentra en el equipodel usuario. Sin embargo, puede conseguir que el explorador la elimine. La técnica consiste en crear unanueva cookie con el mismo nombre que la cookie que se desea eliminar, pero estableciendo su expiración enuna fecha anterior a la actual. Cuando el explorador compruebe la expiración de la cookie, la descartaráporque está anticuada. En el ejemplo de código siguiente se muestra una manera de eliminar todas lascookies disponibles para la aplicación:

Visual Basic

Dim aCookie As HttpCookieDim i As IntegerDim cookieName As StringDim limit As Integer = Request.Cookies.Count - 1For i = 0 To limit

cookieName = Request.Cookies(i).NameaCookie = New HttpCookie(cookieName)aCookie.Expires = DateTime.Now.AddDays(-1)Response.Cookies.Add(aCookie)

NextC#HttpCookie aCookie;string cookieName;int limit = Request.Cookies.Count;for (int i=0; i<limit; i++){

cookieName = Request.Cookies[i].Name;aCookie = new HttpCookie(cookieName);aCookie.Expires = DateTime.Now.AddDays(-1);Response.Cookies.Add(aCookie);

}

APLICACIONES WEB CON ASP.NET

29

Page 127: Módulo_11_Aplicaciones Web con ASP

Modificar o eliminar las subclaves

El proceso de modificación de una subclave determinada es igual que el de creación, como se muestra en elejemplo siguiente:

Visual Basic

Response.Cookies(“userInfo”)(“lastVisit”) = DateTime.Now.ToString()Response.Cookies(“userInfo”).Expires = DateTime.Now.AddDays(1)C#Response.Cookies[“userInfo”][“lastVisit”] = DateTime.Now.ToString();Response.Cookies[“userInfo”].Expires = DateTime.Now.AddDays(1);

Para eliminar una subclave determinada, manipule la colección Values de la cookie, que contiene lassubclaves. En primer lugar, obtenga la cookie del objeto Cookies y vuelva a crearla. A continuación, llame almétodo Remove de la colección Values y pase al método Remove el nombre de la subclave que deseaeliminar. Al fin se agrega la cookie a la colección Cookies para que se envíe otra vez, ya modificada, alexplorador. Cómo eliminar una subclave. En el ejemplo, el nombre de la subclave se indica en una variable.

Visual Basic

Dim subkeyName As StringsubkeyName = “userName”Dim aCookie As HttpCookie = Request.Cookies(“userInfo”)aCookie.Values.Remove(subkeyName)aCookie.Expires = DateTime.Now.AddDays(1)Response.Cookies.Add(aCookie)C#string subkeyName;subkeyName = “userName”;HttpCookie aCookie = Request.Cookies[“userInfo”];aCookie.Values.Remove(subkeyName);aCookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);

APLICACIONES WEB CON ASP.NET

30

Page 128: Módulo_11_Aplicaciones Web con ASP

Las cookies y la seguridad

Los problemas de seguridad relacionados con las cookies son similares a los producidos por recibir datos delcliente. En una aplicación, las cookies son otro tipo de datos proporcionados por el usuario y, porconsiguiente, están expuestos al examen y a la suplantación. Como mínimo, el usuario puede ver los datosalmacenados en una cookie, ya que ésta se encuentra disponible en el propio equipo del usuario. Tambiénpuede cambiar la cookie antes de que el explorador la envíe a su aplicación.

Nunca debería almacenar datos confidenciales en una cookie, por ejemplo nombres de usuario, contraseñas,números de tarjeta de crédito, etc. Jamás almacene en una cookie nada que no debiera estar en las manosde un usuario o de alguien que pudiera robar la cookie.

Las cookies se envían entre el explorador y el servidor como texto sin formato y cualquiera que puedainterceptar el tráfico Web puede leer la cookie. Si lo desea, puede establecer una propiedad de cookie quehace que ésta sólo se transmita si la conexión utiliza Secure Sockets Layer (SSL). SSL no impide la lectura nila manipulación de la cookie mientras se encuentra en el equipo del usuario, pero impide su lectura mientrasse encuentra en tránsito, dado que la cookie está cifrada..

Determinar si un explorador acepta cookies

Los usuarios pueden configurar su explorador para que rechace las cookies. No se produce ningún error si nose puede escribir una cookie. Así, el explorador no envía ninguna información al servidor sobre suconfiguración de cookies actual.

Una manera de determinar si se aceptan las cookies consiste en intentar escribir una cookie y, a continuación,intentar leerla. Si no puede leer la cookie que ha escrito, debería dar por supuesto que las cookies estándesactivadas en el explorador.

Se muestra cómo podría comprobar si se aceptan las cookies. El caso consta de dos páginas. La primerapágina escribe una cookie y, a continuación, redirige el explorador a la segunda página. La segunda páginaintenta leer la cookie. A su vez, redirige el explorador otra vez a la primera página y agrega a la direcciónURL una variable de cadena de consulta con los resultados de la prueba.

APLICACIONES WEB CON ASP.NET

31

Page 129: Módulo_11_Aplicaciones Web con ASP

Primera página:

Visual Basic

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

If Not Page.IsPostBack ThenIf Request.QueryString(“AcceptsCookies”) Is Nothing Then

Response.Cookies(“TestCookie”).Value = “ok”Response.Cookies(“TestCookie”).Expires = _

DateTime.Now.AddMinutes(1)Response.Redirect(“TestForCookies.aspx?redirect=” & _

Server.UrlEncode(Request.Url.ToString))Else

Label1.Text = “Accept cookies = “ & _Server.UrlEncode(Request.QueryString(“AcceptsCookies”))

End IfEnd If

End SubC#protected void Page_Load(object sender, EventArgs e){

if (!Page.IsPostBack){

if (Request.QueryString[“AcceptsCookies”] == null){

Response.Cookies[“TestCookie”].Value = “ok”;Response.Cookies[“TestCookie”].Expires =

DateTime.Now.AddMinutes(1);Response.Redirect(“TestForCookies.aspx?redirect=” +

Server.UrlEncode(Request.Url.ToString()));}else{

Label1.Text = “Accept cookies = “ +Server.UrlEncode(Request.QueryString[“AcceptsCookies”]);

}}

}

APLICACIONES WEB CON ASP.NET

32

Page 130: Módulo_11_Aplicaciones Web con ASP

La página comprueba si se trata de una devolución de datos; si no es así, busca el nombre de la variable decadena de consulta AcceptsCookies que contiene los resultados de la prueba. Si no hay ninguna variable decadena de consulta, no se ha finalizado la comprobación, por lo que el código escribe una cookie denominadaTestCookie. Después de escribir la cookie, el ejemplo llama a Redirect para transferir TestForCookies.aspx ala página de prueba. Se anexa a la dirección URL de la página de prueba una variable de cadena de consultadenominada redirect que contiene la dirección URL de la página actual; esto permite redirigir el exploradorde nuevo a esta página después de realizar la prueba.

La página de prueba puede contener únicamente código; no es necesario que contenga controles. Página de prueba. Visual BasicSub Page_Load()

Dim redirect As String = Request.QueryString(“redirect”)Dim acceptsCookies As StringIf Request.Cookies(“TestCookie”) Is Nothing Then

acceptsCookies = “no”Else

acceptsCookies = “yes”‘ Delete test cookie.Response.Cookies(“TestCookie”).Expires = _

DateTime.Now.AddDays(-1)End IfResponse.Redirect(redirect & “?AcceptsCookies=” & acceptsCookies, _

True)End SubC#protected void Page_Load(object sender, EventArgs e){

string redirect = Request.QueryString[“redirect”];string acceptsCookies;if(Request.Cookies[“TestCookie”] ==null)

acceptsCookies = “no”;else{

acceptsCookies = “yes”;// Delete test cookie.Response.Cookies[“TestCookie”].Expires =

DateTime.Now.AddDays(-1);}Response.Redirect(redirect + “?AcceptsCookies=” + acceptsCookies,true);

}

APLICACIONES WEB CON ASP.NET

33

Page 131: Módulo_11_Aplicaciones Web con ASP

Después de leer la variable de cadena de consulta de redirección, el código intenta leer la cookie. Por razonesde mantenimiento, si la cookie existe, se elimina inmediatamente. Cuando finaliza la prueba, el códigoconstruye una nueva dirección URL a partir de la dirección URL pasada en la variable de cadena de consultaredirect. La nueva dirección URL también incluye una variable de cadena de consulta que contiene losresultados de la prueba. El último paso consiste en utilizar la nueva dirección URL para redirigir el exploradora la página original.

Una mejora que se podría realizar en el ejemplo sería conservar los resultados de la prueba de la cookie enun almacén persistente, como una base de datos, para que la prueba no se tenga que repetir cada vez queel usuario visite la página original. (De forma predeterminada, el almacenamiento de los resultados de laprueba en el estado de sesión requiere cookies.)

Las cookies y el estado de sesión

Cuando un usuario navega en su sitio, el servidor establece para dicho usuario una sesión única que terminacuando finalice la visita. ASP.NET mantiene información de estado de sesión donde las aplicaciones puedenalmacenar información específica del usuario.

ASP.NET debe realizar el seguimiento de un id. de sesión para cada usuario con objeto de poder asignar elusuario a la información de estado de sesión en el servidor. Por defecto, ASP.NET utiliza una cookie nopersistente para almacenar el estado de sesión. Si un usuario ha deshabilitado las cookies en el explorador,la información de estado de sesión no se puede almacenar en una cookie.

ASP.NET proporciona una alternativa en forma de sesiones sin cookies. Puede configurar su aplicación paraque almacene los identificadores de sesión en las direcciones URL de las páginas de su sitio, en lugar dealmacenarlos en las cookies. Si su aplicación se basa en el estado de sesión, debería tener en cuentaconfigurarla para que utilice sesiones sin cookies. En unos cuantos casos, si el usuario comparte la direcciónURL con otra persona (por ejemplo, para enviar dicha dirección a un colega mientras esté activa la sesióndel usuario), es posible que ambos usuarios terminen compartiendo la misma sesión y los resultados seríanimpredecibles.

Referencia de clase

APLICACIONES WEB CON ASP.NET

34

Page 132: Módulo_11_Aplicaciones Web con ASP

PERSONALIZACIÓNDE APLICACIONES

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 133: Módulo_11_Aplicaciones Web con ASP

Las páginas Master Pages.

Características de una Master Page y Propiedades

@ Master

Define los atributos específicos de página principal (archivo .master) que utilizan el analizador y el compilador de páginas ASP.NET.

<%@ Master attribute=”value” [attribute=”value”...] %>

Atributos

AutoEventWireup

Indica si se pueden definir controladores de eventos simples para fases específicas del ciclo de vida mediantela sintaxis Page sin un enlace o firma de evento explícitos. Es true si la conexión automática de eventos estáhabilitada; de lo contrario es false. El valor predeterminado es true. Para obtener más información, vea Mo-delo de eventos de control de servidor Web ASP.NET.

ClassName

Especifica el nombre de la clase que se genera automáticamente a partir del formato y se compila al procesarla página principal. Este valor puede ser cualquier nombre de clase válido y puede incluir un espacio denombres.

CodeFile

Especifica el nombre de un archivo independiente que contiene una clase parcial con los controladores deeventos y otro código específico de la página principal. Para obtener más información, vea Modelo de códigode las páginas Web ASP.NET.

CompilationMode

Especifica si una página principal ASP.NET se va a compilar en tiempo de ejecución. Las opciones son: Alwayspara compilar siempre la página; Auto si ASP.NET debe evitar la compilación de la página cuando sea posible;y Never para no compilar nunca la página o el control. El valor predeterminado es Always.

APLICACIONES WEB CON ASP.NET

2

Page 134: Módulo_11_Aplicaciones Web con ASP

CompilerOptions

Proporciona una cadena que contiene opciones del compilador para compilar la página. En C# y MicrosoftVisual Basic, se trata de una secuencia de modificadores de línea de comandos del compilador.

Debug

Indica si la página principal se compilará con símbolos de depuración. Es true para compilar con símbolos dedepuración; de lo contrario es false.

Description

Proporciona una descripción de la página principal. El analizador de ASP.NET no tiene en cuenta este valor.

EnableTheming

Indica si se puede modificar la apariencia de la página principal y sus controles cuando se aplique un tema.Es true si se puede aplicar un tema; de lo contrario es false. El valor predeterminado es true. Establecer elatributo EnableTheming es principalmente útil cuando se define un tema de página en el archivo Web.configy se aplica a todas las páginas de forma predeterminada. Para obtener más información, vea Informacióngeneral sobre temas y máscaras de ASP.NET.

EnableViewState

Indica si el estado de vista se mantiene entre las solicitudes de la página. Es true para mantener el estadode vista; de lo contrario es false. El valor predeterminado es true.

Explicit

Determina si la página se ha compilado mediante el modo Option Explicit de Visual Basic. true indica que laopción de compilación explícita de Visual Basic está habilitada y que todas las variables deben declararse conuna instrucción Dim, Private, Public o ReDim; en caso contrario, false. El valor predeterminado es false.El atributo Explicit se establece en true en el archivo Machine.config..

Inherits

Especifica la clase de código subyacente que la página hereda. Puede ser cualquier clase derivada de laclase MasterPage.

APLICACIONES WEB CON ASP.NET

3

Page 135: Módulo_11_Aplicaciones Web con ASP

Language

Especifica el lenguaje utilizado cuando se compilan todos los bloques de representación en línea (<% %> y<%= %>) y de declaración de código dentro de la página. Los valores pueden representar cualquier lenguajeadmitido por .NET Framework, incluso VB (Visual Basic), C# y JScript.

LinePragmas

Determina si se deben generar pragmas en el código generado en tiempo de ejecución.

MasterPageFile

Especifica el archivo .master que actúa como página principal para una página principal. El atributoMasterPageFile se utiliza en una página principal al definir una página principal secundaria en un escenariode varias páginas anidadas..

Src

Especifica el nombre del archivo de código fuente de la clase de código subyacente que se compilarádinámicamente cuando se solicite la página. La lógica de programación de la página se puede incluir en unaclase de código subyacente o en Bloques de declaraciones de código del archivo .aspx.

Strict

Especifica si la página se compilará utilizando el modo Option Strict de Visual Basic. Es true si se habilitaOption Strict; de lo contrario es false. El valor predeterminado es false.

WarningLevel

Especifica el nivel de advertencia del compilador en el que se anula la compilación de la página. Los valoresposibles van de 0 a 4. Para obtener más información, vea WarningLevel.

La directiva @ Master sólo se puede utilizar en páginas principales. Las páginas principales se definen enarchivos con la extensión .master. Sólo se puede incluir una directiva @ Master por cada archivo .master.

APLICACIONES WEB CON ASP.NET

4

Page 136: Módulo_11_Aplicaciones Web con ASP

Ejemplo

Indicamos al compilador de páginas ASP.NET que utilice Visual Basic como lenguaje de código en línea. Elcódigo de control de eventos se define en una clase parcial denominada MasterPageSample. El código parala clase MasterPageSample se puede encontrar en el archivo MasterPageSample.master.vb.

<% @ Master Language=”VB” CodeFile=”MasterPageSample.master.vb” Inherits=”MasterPageSample” %>

Capítulo 2. Creación de Master Pages y páginas de contenido.

Las páginas principales de ASP.NET permiten crear un diseño coherente para las páginas de la aplicación.Puede definir el aspecto, el diseño y el comportamiento estándar que desea que tengan todas las páginas (oun grupo de páginas) de la aplicación en una sola página principal.

Puede crear páginas de contenido individuales que incluyan el contenido que desea mostrar. Cuando losusuarios solicitan las páginas de contenido, éstas se combinan con la página principal para dar como resultadouna página con el diseño de la página principal y el contenido de la página de contenido.

Cómo funcionan las páginas principales

Las páginas principales se componen en realidad de dos partes, la propia página principal y una o variaspáginas de contenido.

Páginas principales

Una página principal es un archivo de ASP.NET con la extensión .master (por ejemplo, MySite.master) quetiene un diseño predefinido que puede incluir texto estático, elementos HTML y controles de servidor. Lapágina principal se identifica mediante una directiva @ Master especial que reemplaza la directiva @ Pageutilizada en las páginas .aspx ordinarias. El aspecto de la directiva es el siguiente:

Visual Basic<%@ Master Language=”VB” %>C#<%@ Master Language=”C#“ %>

APLICACIONES WEB CON ASP.NET

5

Page 137: Módulo_11_Aplicaciones Web con ASP

La directiva @ Master puede contener prácticamente las mismas directivas que una directiva @ Control. Porejemplo, la directiva de la página principal siguiente incluye el nombre de un archivo de código subyacentey asigna un nombre de clase a la página principal.

Visual Basic

<%@ Master Language=”VB” CodeFile=”MasterPage.master.vb” Inherits=”MasterPage” %>

C#<%@ Master Language=”C#“ CodeFile=”MasterPage.master.cs” Inherits=”MasterPage” %>

Además de la directiva @ Master, la página principal también incluye todos los elementos HTML de nivelsuperior de una página, como html, head y form. Por ejemplo, en una página principal podría utilizar unatabla HTML para el diseño, un elemento img para el logotipo de la compañía, texto estático para el aviso decopyright y controles de servidor para crear la navegación estándar en el sitio. Puede utilizar cualquierelemento HTML y ASP.NET en la página principal.

Marcadores de posición de contenido reemplazables

Además del texto estático y los controles que aparecerán en todas las páginas, la página principal tambiénincluye uno o varios controles ContentPlaceHolder. Estos controles PlaceHolder definen las regiones queincluirán contenido reemplazable. A su vez, el contenido reemplazable se define en las páginas de contenido.Tras definir los controles ContentPlaceHolder, una página principal tendría el siguiente aspecto:

Visual Basic<% @ Master Language=”VB” %>

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

<html ><head runat=”server” >

<title>Master page title</title></head><body>

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

<tr><td><asp:contentplaceholder id=”Main” runat=”server” /></td><td><asp:contentplaceholder id=”Footer” runat=”server” /></td>

APLICACIONES WEB CON ASP.NET

6

Page 138: Módulo_11_Aplicaciones Web con ASP

</tr></table>

</form></body></html>C#<%@ Master Language=”C#“ %>

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

<html ><head runat=”server” >

<title>Master page title</title></head><body>

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

<tr><td><asp:contentplaceholder id=”Main” runat=”server” /></td><td><asp:contentplaceholder id=”Footer” runat=”server” /></td>

</tr></table>

</form></body></html>

Páginas de contenido

Para definir el contenido de los controles PlaceHolder de la página principal, cree páginas de contenidoindividuales, que son páginas ASP.NET (archivos .aspx y, opcionalmente, archivos de código subyacente) queestán enlazadas a una página principal concreta. El enlace se establece en la directiva @ Page de la páginade contenido al incluir un atributo MasterPageFile que apunta a la página principal que se va a utilizar. Unapágina de contenido podría tener la siguiente directiva @ Page, que la enlaza con la página Master1.master.

APLICACIONES WEB CON ASP.NET

7

Page 139: Módulo_11_Aplicaciones Web con ASP

APLICACIONES WEB CON ASP.NET

8

Visual Basic

<%@ Page Language=”VB” MasterPageFile=”~/MasterPages/Master1.master” Title=”Content Page” %>C#<%@ Page Language=”C#“ MasterPageFile=”~/MasterPages/Master1.master” Title=”Content Page”%>

En la página de contenido, cree el contenido agregando los controles Content y asignándolos a los controlesContentPlaceHolder de la página principal. La página principal podría tener marcadores de posición decontenido denominados Main y Footer. En la página de contenido, puede crear dos controles Content, unoasignado al control ContentPlaceHolderMain y el otro asignado al control ContentPlaceHolderFooter, comose muestra en la ilustración siguiente.

Reemplazar el contenido del marcador de posición

Página Resultante

Page 140: Módulo_11_Aplicaciones Web con ASP

Después de crear los controles Content, agrégueles texto y controles. En una página de contenido, todo loque no esté dentro de los controles Content (excepto los bloques de script del código del servidor) produciráun error. En una página de contenido puede realizar las mismas tareas que en una página de ASP.NET. Porejemplo, puede generar el contenido de un control Content utilizando controles de servidor y consultas debase de datos u otros mecanismos dinámicos.

Una página de contenido podría ser así:

Visual Basic

<% @ Page Language=”VB” MasterPageFile=”~/Master.master” Title=”Content Page 1” %><asp:Content ID=”Content1” ContentPlaceHolderID=”Main” Runat=”Server”>

Main content.</asp:Content>

<asp:Content ID=”Content2” ContentPlaceHolderID=”Footer” Runat=”Server” >Footer content.

</asp:content>

[C#]<% @ Page Language=”C#“ MasterPageFile=”~/Master.master” Title=”Content Page 1” %><asp:Content ID=”Content1” ContentPlaceHolderID=”Main” Runat=”Server”>

Main content.</asp:Content>

<asp:Content ID=”Content2” ContentPlaceHolderID=”Footer” Runat=”Server” >Footer content.

</asp:content>

La directiva @ Page enlaza la página de contenido a una página principal concreta y define un título para lapágina que se combinará en la página principal. Tenga en cuenta que la página de contenido no incluye otromarcado fuera de los controles Content. (La página principal debe contener un elemento head con el atributorunat=”server” para que se pueda combinar la configuración del título en tiempo de ejecución.)

Puede crear varias páginas principales para definir diseños distintos para partes diferentes del sitio, y unconjunto diferente de páginas de contenido para cada página principal.

APLICACIONES WEB CON ASP.NET

9

Page 141: Módulo_11_Aplicaciones Web con ASP

Ventajas de las páginas principales

Las páginas principales proporcionan una funcionalidad que tradicionalmente los programadores creabancopiando el código, el texto y los elementos de control existentes repetidamente, mediante conjuntos demarcos, archivos de inclusión de elementos comunes, controles de usuario de ASP.NET, etc. Entre las ventajasde las páginas principales se incluyen las siguientes:

- Permiten centralizar las funciones comunes de las páginas para que las actualizaciones puedanllevarse a cabo en un solo lugar.

- Facilitan la creación de un conjunto de controles y código, y aplican los resultados en un conjuntode páginas. Por ejemplo, puede utilizar los controles en la página principal para crear un menú quese aplique a todas las páginas.

- Proporcionan un control más preciso sobre el diseño de la página final al permitir controlar el modoen que se representan los controles PlaceHolder.

- Proporcionan un modelo de objetos que permite personalizar la página principal a partir de páginasde contenido individuales.

Comportamiento en tiempo de ejecución de las páginas principales

En tiempo de ejecución, las páginas principales se controlan en la secuencia siguiente:

1. Los usuarios solicitan una página escribiendo la dirección URL de la página de contenido.

2. Cuando se obtiene la página, se lee la directiva @ Page. Si la directiva hace referencia a unapágina principal, también se lee la página principal. Si las páginas se solicitan por primera vez,se compilan las dos páginas.

3. La página principal con el contenido actualizado se combina en el árbol de control de la páginade contenido.

4. El contenido de los controles Content individuales se combina en el control ContentPlaceHoldercorrespondiente de la página principal.

5. La página combinada resultante se representa en el explorador.

APLICACIONES WEB CON ASP.NET

10

Page 142: Módulo_11_Aplicaciones Web con ASP

Páginas principales en tiempo de ejecución

Desde la perspectiva del usuario, la combinación de las páginas principales y de contenido da como resultadouna única página. La dirección URL de esta página es la de la página de contenido.

Desde la perspectiva del programador, las dos páginas actúan como contenedores diferentes para susrespectivos controles. La página de contenido actúa como un contenedor de la página principal. Sin embargo,se puede hacer referencia a los miembros públicos de una página principal a partir del código de la páginade contenido, tal y como se describe en la sección siguiente.

Tenga en cuenta que la página principal pasa a formar parte de la página de contenido. La página principalactúa fundamentalmente de igual forma que un control de usuario: como un elemento secundario de lapágina de contenido y como un contenedor dentro de esa página. La página principal es el contenedor detodos los controles de servidor representados en el explorador. El árbol de control de una página principal yuna página de contenido combinadas tendrá un aspecto similar a:

PageMaster Page

(Master page markup and controls)ContentPlaceHolderContent page markup and server controls

(Master page markup and controls)ContentPlaceHolder

Content page markup and server controls(Master page markup and controls)

Esta diagrama está simplificado; si la página de contenido no tiene los controles Content correspondientes,la página principal también podría tener marcado y controles en los controles ContentPlaceHolder.

Esta estructura no tiene ningún efecto sobre el modo en que se crean o se programan las páginas. En algunoscasos, si establece una propiedad de toda la página en la página principal, puede verse afectado elcomportamiento de la página de contenido, porque la página principal es el elemento principal más inmediatopara los controles de la página. Si establece la propiedad EnableViewState de la página de contenido entrue pero establece la misma propiedad en false en la página principal, el estado de vista se deshabilitaráporque la configuración de la página principal tendrá prioridad.

APLICACIONES WEB CON ASP.NET

11

Page 143: Módulo_11_Aplicaciones Web con ASP

Rutas de acceso de la página principal y la página de contenido

Cuando se solicita una página de contenido, su contenido se combina con la página principal, y la página seejecuta en el contexto de la página de contenido. Por ejemplo, si obtiene la propiedadCurrentExecutionFilePath del objeto HttpRequest ya sea en el código de la página de contenido o en el códigode la página principal, la ruta de acceso representa la ubicación de la página de contenido.

La página principal y la página de contenido no tienen que estar en la misma carpeta. Siempre que el atributoMasterPageFile de la directiva @ Page de la página de contenido se resuelva como una página .master,ASP.NET puede combinar el contenido y las páginas principales en una sola página representada.

Referencias a recursos externos

La página de contenido y la página principal pueden contener controles y elementos que hagan referencia arecursos externos. Por ejemplo, las dos podrían contener controles de imagen que hicieran referencia aarchivos de imágenes o podrían contener delimitadores que hicieran referencia a otras páginas.

El contexto de las páginas principales y de contenido combinadas es el de la página de contenido. Esto puedeafectar al modo en que se especifican las direcciones URL de los recursos, como archivos de imágenes ypáginas de destino, en los delimitadores.

Controles de servidor (Referencia a controles)

En los controles de servidor de las páginas principales, ASP.NET modifica dinámicamente las direcciones URLde las propiedades que hacen referencia a recursos externos. Podría situar un control Image en una páginaprincipal y establecer su propiedad ImageUrl para que hiciera referencia a la página principal. En tiempo deejecución, ASP.NET modificará la dirección URL para que se resuelva correctamente en el contexto de lapágina de contenido.

ASP.NET puede modificar las direcciones URL en los casos siguientes:

- La dirección URL es una propiedad de un control de servidor ASP.NET.

- La propiedad se marca internamente en el control como una dirección URL. (La propiedad se marcacon el atributo UrlPropertyAttribute.) Por cuestiones prácticas, las propiedades de los controles deservidor ASP.NET que se utilizan normalmente para hacer referencia a recursos externos se marcande este modo.

APLICACIONES WEB CON ASP.NET

12

Page 144: Módulo_11_Aplicaciones Web con ASP

Otros elementos

ASP.NET no puede modificar las direcciones URL de los elementos que no son controles de servidor. Porejemplo, si utiliza un elemento img en una página principal y establece su atributo src en una direcciónURL, ASP.NET no modificará esta dirección URL. En ese caso, la dirección URL se resolverá en el contexto dela página de contenido y se creará la dirección URL convenientemente.

Al trabajar con elementos en las páginas principales, resulta recomendable utilizar un control de servidorincluso para los elementos que no requieren código de servidor. Por ejemplo, en lugar de utilizar un elementoimg, utilice un control de servidor Image. De este modo, ASP.NET puede resolver las direcciones URLcorrectamente y puede evitar los problemas de mantenimiento que podrían surgir al mover la página principalo la página de contenido.

Páginas principales y temas

No puede aplicar directamente un tema de ASP.NET a una página principal. Si agrega un atributo de tema ala directiva @ Master, se producirá un error en la página cuando se ejecute.

Los temas se aplican a las páginas principales bajo estas circunstancias:

- Si un tema está definido en la página de contenido. Las páginas principales se resuelven en elcontexto de las páginas de contenido, por lo que el tema de la página de contenido también se aplicaa la página principal.

- Si todo el sitio se ha configurado para que utilice un tema incluyendo la definición de un tema en elelemento Elemento pages (Esquema de configuración de ASP.NET).

Ámbito de las páginas principales

Puede adjuntar páginas de contenido a una página principal en tres niveles:

- En el nivel de la página Puede utilizar una directiva de página en cada página de contenido paraenlazarla a una página principal, como en el ejemplo de código siguiente.

Visual Basic<%@ Page Language=”VB” MasterPageFile=”MySite.Master” %> C#<%@ Page Language=”C#“ MasterPageFile=”MySite.Master” %>

APLICACIONES WEB CON ASP.NET

13

Page 145: Módulo_11_Aplicaciones Web con ASP

APLICACIONES WEB CON ASP.NET

14

- En el nivel de la aplicación Al establecer la configuración del elemento pages del archivo deconfiguración de la aplicación (Web.config), puede especificar que todas las páginas de ASP.NET(archivos .aspx) de la aplicación se enlacen automáticamente a una página principal. El elementopodría tener el aspecto siguiente:

<pages masterPageFile=”MySite.Master” />

Si utiliza esta estrategia, todas las páginas de ASP.NET de la aplicación que tengan controles Contentse combinarán con la página principal especificada. (Si una página de ASP.NET no contiene controlesContent, no se aplica la página principal.)

- En el nivel de la carpeta Esta estrategia es igual que la estrategia de definir enlaces en el nivel dela aplicación excepto en que la configuración se define en un archivo Web.config en una únicacarpeta. Los enlaces de la página principal se aplican a continuación a las páginas ASP.NET de dichacarpeta.

Eventos de la página máster

MasterPage (Eventos)

Eventos públicos

Page 146: Módulo_11_Aplicaciones Web con ASP

En este caso tendrás que enviar correos desde una página ASP.NET (.aspx), usando las clases del

espacio de nombres System.Net.Mail, que son nuevas para la versión 2.0 de .NET Framework.

De ese espacio de nombres utilizarás tres clases:

- MailMessage que será la clase con la que crearás el mensaje, y en la que indicarás el que envíael mensaje, quién lo recibe, el asunto, etc.

- Para indicar el que envía el mensaje, tendrás que usar un objeto del tipo MailAddress, el cual letendrás que asignar a la propiedad From de la clase MailMessage.

- Para enviar el mensaje usarás un objeto del tipo SmtpClient, que a diferencia de ASP.NET normal,no tiene métodos estáticos (compartidos), por tanto tendrás que crear una nueva instancia deesa clase y asignar los valores apropiados para poder mandar el mensaje.

APLICACIONES WEB CON ASP.NET

1

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.

Page 147: Módulo_11_Aplicaciones Web con ASP

En este caso, tendrás que desarrollar una interfaz HTML en la que tendremos un textarea y un botón de“Mostrar contenido” de un fichero de texto que estará ubicado en el servidor web. Todo a través de unapágina ASP .NET (aspx).

APLICACIONES WEB CON ASP.NET

1

© élogos Conocimiento, S.L. Madrid 2009. Todos los derechos de Propiedad Intelectual e Industrial de esta obra pertenecen a élogos Conocimiento, S.L.