You are on page 1of 146

Tema 1. INTRODUCCIÓN AL DESARROLLO DE APLICACIONES WEB _______ 1 Tema 2. REQUISITOS DEL ASP.NET (.

NET FRAMEWORK) _______________ 11 Tema 3. CONCEPTOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS ___ 19 Tema 4. CREANDO UNA PÁGINA BÁSICA ____________________________ 31 Tema 5. CONCEPTOS DE WEB FORMS ______________________________ 55 Tema 6. COMPONENTES (DATALIST, DATAGRID) ______________________ 83 Tema 7. DIRECTIVAS DE PÁGINA ___________________________________ 91 Tema 8. CONFIGURACIÓN DE IIS ___________________________________ 99 Tema 9. EL ARCHIVO GLOBAL.ASAX_______________________________ 111 Tema 10. EL ARCHIVO WEB.CONFIG ______________________________ 119 Tema 11. MÓDULOS Y MANEJADORES http_________________________ 129 Tema 12. SEGURIDAD EN ASP.NET ________________________________ 135 GLOSARIO_______________________________________________________ 143

Tema 1

INTRODUCCIÓN AL DESARROLLO DE APLICACIONES WEB

1.1. ASP 3_________________________________________________ 5 1.2. JAVA (JSP, SERVLETS) __________________________________ 6 1.3. PHP __________________________________________________ 7 1.4. DHTML________________________________________________ 9

-1-

.

proveedor y cliente). y cada vez que el alumno realiza un ejercicio o examen. de venta (de billetes de avión. Como ejemplo podemos citar una plataforma de teleformación que soporte matriculación de alumnos. un sitio Web suele soportar la recogida de datos a través de formularios. inclusiones de archivos (subir ficheros al servidor. estadísticas de tiempos sobre conexiones al centro virtual. que almacena para él en una base de datos. etc. de la forma de interactuar que tenga con la aplicación (en cuántos cursos se ha matriculado.El desarrollo de aplicaciones para el entorno Internet ha cambiado mucho desde su aparición hace algunos años. etc. de ocio (portales de juegos) . envío de correos electrónicos. se le presenta una página personalizada (con acceso a cada uno de los cursos en que está matriculado). subida de cursos. cuyo aspecto final va a depender de las acciones del usuario. y las necesidades básicas de un sitio Web han cambiado. las aplicaciones Web se diseñan con el propósito de suministrar al usuario una serie de servicios más complejos. En definitiva. las tiendas o comercios virtuales. -3- . exámenes.. almacenamiento de notas. visitas por curso y alumno. redireccionamiento de acuerdo al perfil del usuario. Actualmente. Al principio. El mundo de la informática avanza rápidamente. Cada vez que el alumno entra en la plataforma y se loga (introduce su nombre de usuario y contraseña). etc. sin proporcionar ninguna interacción con el usuario. como imágenes o documentos). sin capas ni estilos.). acceso a bases de datos. Estos son ejemplos de páginas dinámicas. los temas o respuestas que ha dado en los foros de su curso. hoy día. se encuentran los portales. y del que va formando un expediente.. el diseño y el sistema de navegación presentados. subastas). B2C (Business-To-Consumer.2. con lo que se obtenían páginas estáticas cuya labor únicamente era suministrar información personal del autor o de la empresa (de forma textual o a través de imágenes). un HTML sencillo basado en la especificación 3. Entre las aplicaciones típicas desarrolladas en la actualidad. Estos desarrollos se caracterizan por el alto número de usuarios que tienen que soportar y por la calidad de la interfaz de usuario. el desarrollo de páginas Web se limitaba prácticamente al uso del lenguaje de marcado HTML (lenguaje de marcado de hipertexto). aplicaciones publicitarias. el sistema puede comprobar los resultados introducidos y otorgarle una nota. si ha aprobado o suspendido un examen. pero.

estos protocolos son estándares que implementan una serie de mecanismos básicos para permitir el paso de información entre los equipos clientes de los usuarios (que contienen los navegadores de Internet) y los equipos servidores (que contienen la aplicación). y son principalmente. TCP/IP (Protocolo de Control de Transmisión / Protocolo de Internet y HTTP (Protocolo de Transmisión de Hipertexto). mayor complejidad y potencia de herramientas y nuevas tecnologías usadas en su programación. A su vez. A continuación. A mayor complejidad de aplicaciones. vamos a ver una serie de tecnologías de desarrollo Web utilizadas en la actualidad: -4- .Ejemplo de aplicación Web actual: Plataforma de Teleformación Los desarrollos Internet se implementan sobre los protocolos y lenguajes de Internet.

La extensión de estas páginas es .NET. Su proceso de desarrollo es relativamente rápido. y funcionaban bajo las versiones del servidor Web de Microsoft. también la solución inicial de Microsoft a la programación Web. y por tanto. Sin embargo.1. En esta dirección puede encontrarse abundante documentación sobre ASP -5- . ASP 3 Es la versión previa a la tecnología ASP. su modelo de desarrollo es más bien funcional.asp (son las comúnmente llamadas páginas ASP.1. y no totalmente orientado a objetos. está integrado con el modelo COM (Modelo de Objetos Componentes) de Windows y se encuentra muy extendido (ha sido uno de los más utilizados en los últimos tiempos). y que aún hoy siguen utilizándose en la programación de multitud de sitios Web). 4 y 5. VBScript y Jscript) embebidos en páginas HTML. Sus siglas se correponden con Active Server Pages en su versión 3 (Páginas Activas de Servidor). Servidor de Información de Internet) en sus versiones 3. Este sistema se basaba en la ejecución de una serie de lenguajes de script (principalmente. IIS (Internet Information Server.

JAVA (JSP. (a lo largo del manual veremos las técnicas más comunes utilizadas con esta tecnología).2. -6- .NET 1. Microsoft da soporte a su nueva solución de programación Web. IIS. páginas JSP (Java Server Pages. Uno de los sitios Web más populares dedicados a ASP. que incluye un conjunto de objetos de servidor o Servlets.NET mejora en los lenguajes y herramientas de desarrollo. SERVLETS) Es la solución de SUN Microsystems para el desarrollo de aplicaciones Web. etc. Páginas de Servidor Java). (aunque existe compatibilidad con el código ASP anterior). Consta de un conjunto de librerías y API (Interfaz de Programación de Aplicaciones) de desarrollo. ASP. y un sistema de programación de páginas con un modelo similar al de ASP (introduciendo código java embebido en páginas HTML).NET. ASP.A partir de la versión 5 de su servidor Web. asume el modelo de programación orientada a objetos. mejora el rendimiento general del sistema.

comunicaciones. encriptación. 1.3. al estar directamente basado en Java. ASP. Podríamos decir que esta solución es más potente y completa para desarrollar aplicaciones Web que la solución de páginas ASP.Este modelo de Servlets y páginas JSP.NET). seguridad. -7- . PHP PHP corresponde a las iniciales de Personal Home Page. disponibilidad de todas las librerías adicionales de Java (generación de imágenes. aunque no siempre podremos utilizar todas sus características bajo este sistema operativo). Procesador de Hipertexto. como la orientación a objetos. presenta todas las ventajas de este lenguaje. Este lenguaje de programación tiene una sintaxis similar a los lenguajes C y Perl. Sitio Web de SUN Microsystems dedicado a Java Java continúa siendo la gran alternativa al desarrollo de aplicaciones Web con tecnología Microsoft (ASP. se interpreta por un servidor Web Apache bajo sistemas Unix/Linux (también han salido al mercado versiones para sistemas Windows. etc).

y además en varios idiomas. -8- . correo electrónico. comunicaciones. etc. es decir. la referencia del lenguaje. transferencia de ficheros. se genera código HTML dinámicamente. pero no está orientado a objetos.php o . Por otro lado. etc. entornos. es preciso mencionar que soporta clases. las páginas HTML incluyen el código PHP embebido en ellas.Presenta una técnica similar a las páginas ASP de Microsoft. como manuales. aunque parece ser que se tiende a utilizar las soluciones de Java y ASP. aunque dispone de una gran número de librerías de funciones para realizar operaciones avanzadas como acceso a bases de datos. Las páginas PHP también se han extendido mucho en los últimos años (son las páginas Web que vemos con extensión .phtml).NET en las nuevas aplicaciones. y al ejecutarlas. En esta dirección podemos encontrar toda documentación necesaria sobre PHP.

cambios de visibilidad en los elementos de la página (partes de la página que aparecen o desaparecen en función de los eventos o acciones del usuario). De hecho. un desarrollador Web. alternancia de imágenes. ésta es una gran diferencia con el resto de las anteriores tecnologías que hemos visto en los apartados anteriores. Se forma de una conjunción de HTML.4. En esta dirección podemos encontrar una referencia muy completa del lenguaje JavaScript -9- . DHTML Sus siglas significan Dinamic HTML (HTML dinámico). hojas de estilo en cascada (CSS) y lenguajes de script como JavaScript o VBScript. basadas en servidor.1. podemos conseguir efectos muy vistosos en nuestras páginas. como formateo más completo al HTML. etc. Estos lenguajes de script se ejecutan en la máquina cliente (en el navegador del usuario que solicita una página). banners. validaciones de entradas del usuario antes de enviar los datos al servidor. que implementa la lógica principal y fundamental de la aplicación. utilizará alguna de las tecnologías anteriores. Normalmente. con lo que obtenemos desplazamiento de imágenes. ya que gracias a éste. en conjunción con el HTML dinámico. capas (contenido de la página cuya posición y tamaño puede cambiar).

han pasado a sitios Web interactivos que ofrecen multitud de servicios a los usuarios.10 - .NET (tecnologías que se ejecutan en el servidor). CSS y lenguajes de script. . PHP. - Actualmente se utilizan tecnologías como DHTML (HTML. Las páginas estáticas que usaban únicamente el lenguaje HTML 3. que se ejecutan en el cliente). y ASP. y ASP 3. como VBScript o JavaScript.2.RECUERDE - El desarrollo de aplicaciones Web ha evolucionado rápidamente en los últimos años. JSP y Servlets.

11 - . CTS ________________________________________________ 16 2. CLS ________________________________________________ 16 2.NET 2.Tema 2 (.4.3.1.NET FRAMEWORK) REQUISITOS DEL ASP.2.NET FRAMEWORK _________________________ 14 2. IL (MSIL) ____________________________________________ 17 . MICROSOFT .

.

(Viene incluido como parte del sistema operativo Windows 2000.NET Framework SDK. Este entorno es muy recomendable.NET.NET no es soportado por Windows NT ni por Windows 9x).NET Framework SDK (Software Development Kit): es la implementación de la plataforma . debemos dejarlo incluido como parte de la instalación del sistema operativo).0 (IIS 5. De hecho. como parte opcional de la instalación.NET. Su distribución es gratuita y podemos descargárnoslo del sitio Web de desarrolladores de Microsoft en http://msdn.NET. (ASP. También podemos conseguir una versión de evaluación de Visual Studio .0 y el Service Pack 2 de Windows 2000. también puede usarse cualquier otro editor de texto común. Además.0).NET. disponer de la aplicación Visual Studio .NET. Es decir.microsoft. el . El Servidor Web Internet Information Server 5. no lo tiene todavía. que es un entorno de desarrollo para la plataforma . al menos.asp). suelen incluir el paquete Microsoft . pero no imprescindible para escribir nuestras aplicaciones ASP.En este capítulo vamos a comentar los programas necesarios para poder desarrollar aplicaciones ASP.NET sobre la que se ejecutarán las páginas ASP.NET en el sitio Web de MSDN (http://msdn. Microsoft .NET: Sistema operativo Windows 2000 Server/Professional.NET. aunque no obligatorio.com/vstudio/productinfo/trial. aunque éstos no proporcionan las utilidades del entorno Visual Studio.NET Framework SDK contiene todas las clases que componen la plataforma . las distribuciones de la aplicación de Visual Studio . Además. También es recomendable. . Para poder instalarlo necesitamos tener instalado. en esta dirección podemos encontrar abundante documentación sobre el tema.microsoft. además de valiosa documentación que nos ayudarán en el desarrollo.com. prueba y depuración de nuestras aplicaciones ASP. por si el equipo donde va a ser instalado el Visual Studio . el navegador Internet Explorer 6.13 - . NET.NET. o la aplicación EditPlus.NET. como el bloc de notas de Windows. Este entorno integrado ofrece una serie de ayudas visuales y utilidades muy interesantes.

con características avanzadas).NET Framework permite el desarrollo de aplicaciones a través del uso de un conjunto de herramientas y servicios que proporciona.NET Framework 2. ASP. MICROSOFT . y que podemos agrupar en tres bloques principales: .NET es un subconjunto de la tecnología . nos ofrece toda una gama de tecnologías para el desarrollo y explotación de aplicaciones. el paquete .NET de Microsoft. Así. las denominadas aplicaciones Windows Forms (generación de formularios. . con el paquete . Es decir.14 - .En el sitio Web de Microsoft podemos descargarnos gratuitamente el paquete . aparte de la tecnología Web.NET FRAMEWORK ASP. que no requieren interfaz del usuario. por ejemplo. la parte relativa a la programación Web. y también las aplicaciones que son servicios del sistema.1.NET.NET.NET se engloba dentro de la tecnología denominada Microsoft .NET también incluye las clases necesarias para soportar las aplicaciones tradicionales de Windows. también es posible la creación de servicios para Windows 2000. que. Pero.

- El motor de generación de interfaz de usuario. Common Language Runtime (Entorno común de ejecución de lenguajes) CTS CLS MSIL Gestión de memoria En este manual vamos a centrarnos en la parte de ASP. como hemos dicho. su ejecución. etc. - La jerarquía de clases básicas de la plataforma o . aunque su base sobre la que se apoya. gestión de hilos (threading).NET Windows Forms . por ejemplo.- El Entorno de Ejecución Común o Common Language Runtime (CLR). se encarga de la gestión del código.NET Framework Basse Classes (clases básicas de la plataforma) ADO. el paquete .15 - . Podemos ver esta estructura de una forma más representativa a través del siguiente esquema de componentes de la plataforma .NET XML THREADING Etc. que permite crear interfaces para la web (con la tecnología ASP.NET Framework. los temas de manipulación de memoria. que.NET.NET) o para el tradicional entorno Windows (Windows Forms).NET Framework Base Classes. para gestionar ficheros XML. CLR. etc.NET). constituye la solución de Microsoft para desarrollar aplicaciones Web. es común para desarrollar otro tipo de aplicaciones para Windows.NET Framework: ASP. Es el núcleo de .NET. . las clases para acceder a bases de datos (ADO. Constituyen un API de servicios para usar en la programación de nuestras aplicaciones.

Es el mecanismo del CLR que permite definir el modo en que los tipos serán creados y manipulados por el entorno de ejecución de . Esta integración se refiere a que.NET. el CLR es la base del sistema Microsoft .16 - . están soportados los lenguajes VB. Actualmente. vamos a ver una serie de términos relacionados con el CLR del . 2. es posible escribir una clase en C#. todos los lenguajes pueden trabajar basándose en una serie de especificaciones de datos que hacen posible el intercambio de información y trabajo con las librerías básicas de la plataforma . y el código compilado no pasa directamente a código ejecutable puro.2. sino a un código intermedio (como veremos en el apartado de IL). y que sea posible la integración y ejecución de todos ellos en el entorno . que le dan la funcionalidad para permitir ser un entorno común de ejecución de lenguajes: 2.NET. y consiste en un conjunto de características comunes que deben cumplir todos los lenguajes de la plataforma. Sistema Común de Tipos.NET.NET tiene soporte multi-lenguaje.NET. CTS Estas siglas corresponden a Common Type System. para poder integrarse entre sí. Por ello. podemos decir que la plataforma . C#. Así. C++ y Jscript. Esto se produce gracias a que el entorno de ejecución es común.NET Framework.A continuación.NET. CLS Como vemos.NET. Este motor hace que sea posible el desarrollo basado en múltiples lenguajes. y heredar de dicha clase desde VB. Esto se realiza gracias al seguimiento de las especificaciones del CLR por parte de los creadores de lenguajes y herramientas de desarrollo. Esta Especificación Común de Lenguajes se conoce como CLS (Common Language Specification). por ejemplo. .NET.3.

17 - .2.C++.NET deberá compilar su código fuente.. La siguiente figura muestra un diagrama con el proceso de generación de lenguaje intermedio a partir del código fuente: Código fuente (C#. hacia el cual cualquier compilador integrado con Microsot .) Compilador Código IL . ya que es el único entendible por el CLR.4. VB. Lenguaje Intermedio de Microsoft. Es un lenguaje parecido al bytecode de Java.NET. IL (MSIL) Estas siglas corresponden a Microsoft Intermediate Languaje.. Este código es independiente de la plataforma y del lenguaje que lo haya originado..

0 y el Service Pack 2 de Windows 2000). Aunque no es imprescindible. Actualmente. - La plataforma .NET podemos escribirlas en cualquier editor de textos. que es un entorno de desarrollo para la plataforma .NET de Microsoft.NET tiene soporte multi-lenguaje. nuestras páginas ASP.NET Framework SDK (Software Development Kit) (además del navegador Internet Explorer 6.NET.0 y el paquete Microsoft .NET.NET necesitamos: el sistema operativo Windows 2000 Server/Professional. - ASP. las denominadas aplicaciones Windows Forms.RECUERDE - Para desarrollar aplicaciones ASP. están soportados los lenguajes VB. el servidor Web Internet Information Server 5.18 - .NET es un subconjunto de la tecnología . C++ y Jscript. El paquete . la parte relativa a la programación Web.NET. C#. . - También es recomendable disponer de la aplicación Visual Studio .NET también incluye las clases necesarias para soportar las aplicaciones tradicionales de Windows.NET.

9. OBJETOS ____________________________________________ 21 3. VENTAJAS DE LA POO_________________________________ 28 3. SOBRECARGA ________________________________________ 26 3. MENSAJES ___________________________________________ 23 3.10.3. INCONVENIENTES DE LA POO___________________________ 28 .2. MÉTODOS ____________________________________________ 26 3. ENCAPSULACIÓN ______________________________________ 21 3. HERENCIA____________________________________________ 24 3. RELACIONES ENTRE CLASES ___________________________ 27 3.4.2.6. POLIMORFISMO _______________________________________ 26 3. CLASES______________________________________________ 23 3.11.8.12.19 - . ABSTRACCIÓN ________________________________________ 22 3. MODELO DE OBJETOS__________________________________ 27 3.Tema 3 CONCEPTOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS 3.5.7.1.

.

3. Algunas acciones que es capaz de realizar un automóvil son: frenar. el número de matrícula. Si lo comparamos con la programación estructurada podríamos hacer la siguiente aproximación: los atributos. podemos tener un objeto bicicleta que represente a una bicicleta dentro de nuestra realidad. OBJETOS El objeto es el concepto principal sobre el cual se fundamenta la tecnología orientada a objetos.21 - . el color. la marca. número de bastidor. podemos mencionar como atributos de éste: el modelo. Veamos el caso particular del objeto automóvil. Un objeto puede ser visto como una entidad que posee un conjunto de atributos y que es capaz de realizar una serie de acciones.NET. Esto es lo que define al objeto. pero también contiene una parte oculta para encapsular los detalles de implementación del objeto. esto es. ENCAPSULACIÓN Es la técnica de ocultar la implementación interna de un objeto. se denominan métodos o funciones miembro. Los atributos de un objeto deben encontrarse ocultos al resto de los objetos. y las acciones que pueden realizar los objetos. entre otros. automóvil o persona. Este objeto automóvil. acelerar y cambiar la velocidad. el lenguaje C#. cómo está construido y de qué se compone. es una instancia particular de la clase automóvil.1. propiedades o variables miembro serían variables y los métodos o funciones miembro serían procedimientos y funciones. no podemos acceder directamente a los atributos de un objeto para modificar su estado o consultarlo. es decir. un objeto ofrece una parte pública que será utilizada por otros objetos para interactuar entre sí. Normalmente. Estos objetos son casos particulares de entidades llamadas clases en donde se definen las características comunes a tales objetos. . necesarios para poder utilizar correctamente el lenguaje en que vamos a programar nuestras páginas ASP. 3.2. Para acceder a los atributos de un objeto debemos utilizar métodos. Por ejemplo.En este capítulo vamos a tratar aspectos genéricos de la Programación Orientada a Objetos (POO). es decir. Los parámetros o variables que definen el estado de un objeto se denominan atributos o variables miembro. o bien un objeto factura. También podemos verlo como una representación o modelización de un objeto real perteneciente a nuestro mundo.

Por ejemplo. Como los atributos y la implementación de cada objeto queda oculta a los demás objetos que interaccionan en el programa. cuando necesitemos indicarle al objeto automóvil que mencionábamos antes. Métodos Públicos (interfaz del objeto) Atributos y Métodos Privados (encapsulados) . que representan la interfaz del objeto. podremos realizar cambios en el código interno de los objetos sin que ello afecte a otros objetos que los utilicen o dependan de ellos. que representa lo que el objeto muestra al mundo exterior. y sólo se encarga de su tarea).2.) sino únicamente la forma de indicarle que realice dicho comportamiento. para definir un objeto y establecer las relaciones de éste con otros objetos. Dicho de otro modo. no es necesario entender la implementación interna de un objeto para poder utilizarlo. se favorece la protección de los datos y la localización de errores en los programas (ya que cada objeto está altamente especializado. Un objeto lo podemos representar como dos circunferencias.Por tanto. con lo que sólo necesitamos conocer qué es lo que hace un objeto. Ocultando los detalles de implementación. 3. no nos interesa conocer cómo realiza este proceso internamente el objeto (a través de un cambio de marcha.22 - . ya que podemos escribir código de manera independiente de cómo se encuentren construidos los diferentes objetos que vamos a utilizar. y otra circunferencia concéntrica externa. que acelere. y que permanece oculta al resto de objetos. ABSTRACCIÓN Es la capacidad de ignorar los aspectos de implementación de los objetos en los pasos iniciales. y no cómo lo hace. Esto consigue una mayor modularidad y facilita el diseño en equipo de programas y la reutilización de clases (componentes). mayor consumo de gasolina. la interfaz pública que permite interactuar con él. una interna que contiene todos los detalles de implementación (variables y métodos privados). podemos ver un objeto como una “caja negra” que tiene un estado determinado que podemos conocer y cambiar mediante una serie de métodos públicos. etc.

En cambio. en nuestro ejemplo. Un objeto solitario generalmente no es muy útil. En nuestro ejemplo. casi siempre aparece como un componente de un programa mayor o una aplicación que contiene muchos otros objetos. Los parámetros necesarios para el método en cuestión. cambiar de marcha en nuestro automóvil. el objeto A envía un mensaje al objeto B. la ejecución de una operación sobre el objeto. comunicarse entre sí. un mensaje enviado a un objeto representa la invocación de un determinado método sobre dicho objeto.23 - . la marcha a la que deseamos cambiar.). ya que la ejecución de ese método devolverá el estado del objeto invocado o lo modificará (cambiará su estado). es decir. Por tanto. un objeto persona) que interactúe con él. para enviar un mensaje necesitamos: El objeto al que vamos a enviar el mensaje. etc.3. Así. el objeto coche es capaz de realizar la acción de cambiar de marchar. pero necesita de otro objeto (por ejemplo. el valor de sus atributos. 3. Mediante las clases podremos crear (instanciar) objetos de un mismo tipo. el objeto automóvil. estos objetos se distinguirán unos de otros a través de su estado. Los objetos interactúan y se comunican mediante el envío de mensajes. Los mensajes a los que un objeto puede responder representan el comportamiento. es decir. molde o prototipo en el que se definen los atributos (variables) y las acciones (métodos) comunes para todos los objetos de un tipo determinado. conseguimos una funcionalidad mayor. cuando un objeto A quiere que otro objeto B realice una acción (un método de la interfaz de B). . que le indique la acción a realizar (también podrá frenar. De esta forma. MENSAJES Son el mecanismo mediante el cual dos objetos pueden interactuar. los dos objetos implicados se comunican. A través de la interacción de esos objetos. CLASES Una clase es una plantilla. y además necesitará recibir la marcha a la que deseamos cambiar. Por tanto. etc.3. las acciones que dicho objeto puede realizar.4. acelerar. El nombre del método (acción o comportamiento que queremos que realice).

girar. podemos ver la herencia como una sucesiva especialización de las clases. definidos en la clase Coche. podemos agregar funcionalidades nuevas a una clase existente. Dicho de otro modo. número de marchas. Igualmente.. que permiten diferenciar a la subclase de su superclase. . reutilizando todo el código que ya teníamos disponible en la clase padre.. La especificación común para todos los objetos del mismo tipo es lo que denominamos clase. encender luces. características que no tiene un coche normal. Esta herencia contesta claramente a esta pregunta: ¿una limusina es también un coche?.. etc. Para verificar que la herencia entre dos clases es correcta. En nuestro ejemplo tenemos una clase Limusina que hereda de la clase Coche. HERENCIA Es el mecanismo mediante el cual podemos reutilizar clases ya definidas. El turismo y la limusina comparten los atributos ‘velocidad actual’. Utilizaremos la misma clase para crear distintos objetos. Una vez implementada una clase podremos instanciar (crear) objetos que pertenezcan a esa clase. En una aplicación orientada a objetos.) y comportamiento (frenar. y la clase que hereda se denomina clase hija o subclase. la clase la vamos a utilizar para definir la estructura de un objeto. debemos hacernos la pregunta “¿es un tipo de . 3. un turismo y una limusina también pueden realizar las acciones (métodos) definidos en la clase Coche: frenar. estado (atributos) y comportamiento (métodos).. Esta clase tiene algunos estados (marcha actual. una limusina puede incluir un teléfono incorporado. ‘número de plazas’. Es decir. cambiar de marcha. Por ejemplo. por lo que. A través de este mecanismo de la POO. un turismo y una limusina son distintos tipos de coches. color. podemos usarla como base para complicarla o especializarla. los métodos y atributos de una clase pueden transmitirse a las clases que descienden de ella.Siguiendo con el mismo ejemplo. métodos y redefinir los métodos de la clase padre. Sin embargo. Una vez definida una clase. potencia. el estado de cada objeto coche es independiente y puede ser diferente al del resto de objetos coche. girar. Cada subclase puede definir atributos y métodos propios para ella. Por ejemplo.) en común..?”. Por eso. La clase hija puede añadir atributos. cada subclase también hereda el mismo comportamiento definido en la superclase. ‘marcha actual’. cierto.24 - .. una nevera o una televisión.5. La clase de la que se hereda se denomina clase padre o superclase. el turismo y la limusina podrían ser subclases de la clase coche. etc. nuestro coche es una instancia de la clase de objetos denominada Coches. es decir.

25 - . mientras que un fórmula 1 puede tener hasta 6 marchas. si hereda de varias clases. Ejemplo de jerarquía de clases (herencia simple) Coche Turismo Limusina Deportivo Monovolumen . por ejemplo. y en las que algunos métodos no han sido implementados (son métodos abstractos). la clase Coche puede contener un método ObtenerNúmeroDeMarchas() que siempre devuelva 5.Las subclases también pueden sobrescribir métodos de la superclase para proporcionar un comportamiento especial. Podríamos seguir definiendo nuevas clases que hereden de la clase Turismo. Esto da lugar a una jerarquía de clases. o múltiple. También podemos definir clases abstractas. No hay límite en cuanto al nivel de herencia. C#. las clases Monovolumen o Deportivo. que son clases que definen comportamientos genéricos. El comportamiento de estos métodos es totalmente libre para las subclases que hereden de ésta y que deberán implementar dichos métodos abstractos para poder ser instanciadas. soporta herencia simple. si la clase hija hereda de una única clase padre. Por ejemplo. El lenguaje que usaremos en la programación de las páginas ASP. La herencia puede ser simple.NET de este manual. por lo que sobrescribiría este método para devolver 6 en lugar de 5.

POLIMORFISMO Es otra más de las características propias de la POO. y métodos públicos. se produce la llamada o invocación de un método de dicho objeto. 3. Cada operación tendrá la implementación necesaria y propia para cada clase. que constituyen la interfaz del objeto con el resto de objetos con quienes puede interaccionar. Son funciones dentro de un objeto. o realizar una acción sobre el estado del mismo.3. Ambas clases necesitarán saber cómo se suman (cómo se suman dos objetos enteros. ocultos (privados). ejecute métodos distintos. pero que difieren en el tipo de los parámetros que reciben. ya que no es lo mismo sumar enteros que matrices). métodos con el mismo nombre. y una clase Matrices.6. Podemos definir un método suma() para la clase Enteros y otro método suma() para la clase Matrices (ambas clases comparten el mismo nombre para esa operación. y cómo se suman dos objetos matrices). . Por ejemplo.8. y como tales. Los métodos consultan o modifican el estado de un objeto. Expresa la posibilidad de que el mismo mensaje. Dentro de un objeto existen métodos de uso interno.7. pero la implementación de estos métodos será distinta en cada clase. Esto nos permite crear un interfaz común para una serie de clases. en el número de ellos. supongamos que tenemos en nuestra aplicación. Por lo tanto. una clase Enteros para modelar un número entero. 3. Se refiere a la posibilidad de tener en una misma clase. SOBRECARGA Otra de las técnicas usadas en la POO. enviado a objetos distintos. Cuando un objeto le envía un mensaje a otro. o bien en el tipo y número de parámetros. pueden retornar un valor (información sobre el estado del objeto). MÉTODOS Como ya hemos comentado anteriormente. es posible definir operaciones con el mismo nombre dentro de clases distintas. para modelar una matriz matemática. También podemos considerar un método como la implementación de un mensaje. los métodos son las acciones que se pueden realizar con los objetos.26 - .

las clases hijas están más especializadas. podría recibir otro objeto matriz. Con esta forma de relación conseguimos una mayor reutilización del código y una mayor especialización a través de la jerarquía de clases. Chasis. encapsulación. . pasándole una instancia de una clase como parámetro del método invocado por el mensaje. MODELO DE OBJETOS Una vez definido e identificado el problema que deseamos solucionar en nuestra aplicación. la clase Coche tiene atributos como son la clase Puerta. Una relación de herencia: ya la hemos visto en el apartado de la Herencia. la suma de matrices. debemos aplicar los principios de la POO que hemos introducido en los apartados anteriores: abstracción. Consiste en que una clase hereda de una clase padre o superclase. Una relación de uso: cuando una clase se relaciona con otra a través de los mensajes que le envía. una forma de interacción o comunicación entre ellas. El primer método implementa la suma matemática entre un entero y una matriz.9. para que nuestra aplicación funcione adecuadamente. Así.10. dos métodos sumar(). obteniendo así toda la funcionalidad ofrecida por la clase padre y pudiendo añadir nuevas funcionalidades. Las clases iniciales en esta jerarquía son más generales. Para ofrecer una mayor funcionalidad y realizar tareas más complejas es necesario que exista una relación entre distintas clases. es decir.Por ejemplo. Motor. Por ejemplo. Para ello. Esto ocurre cuando los atributos de una clase se implementan como objetos de otra clase. cada clase tiene su cometido. Rueda.27 - . Por ejemplo. uno de ellos recibiría un entero para sumar a la matriz. y utilizar en nuestro programa estos objetos computacionales (objetos dentro de nuestro código). etc. herencia y polimorfismo. RELACIONES ENTRE CLASES Cada clase en nuestra aplicación estará especializada en una función o tarea específica. y el otro método sumar(). debemos realizar una representación lógica de los objetos que forman parte del problema en el mundo real. y a medida que profundizamos en la jerarquía de la descendencia. podemos tener. 3. al invocar al método suma de una matriz. 3. una clase puede relacionarse con otra a través de: Una relación de composición: cuando una clase está compuesta de otras clases. y las relaciones existentes entre dichos objetos. en la clase Matriz. le pasamos un objeto entero para que lo sume a un objeto matriz. implementan tareas más concretas. y el segundo.

por lo que podremos seguir comunicándonos con él de igual forma.3. La encapsulación nos garantiza que las modificaciones realizadas en el núcleo de un objeto tendrán un efecto limitado y localizado. su interfaz de comunicación con el resto de objetos se mantendrá. 3. pero de los que conocemos qué hacen. A veces. INCONVENIENTES DE LA POO La curva de aprendizaje suele ser más larga que la necesaria en la programación estructurada. como ya hemos comentado. Facilita el mantenimiento de los programas y la detección de errores. porque debemos tener en cuenta las relaciones con otros objetos. a través de la herencia.12. C#.NET. el establecimiento de nuevas relaciones puede implicar un cambio en la definición del objeto.11. . Jerarquías de herencia complejas. VENTAJAS DE LA POO Facilita la reutilización del software. Dificultad en determinar las características de un objeto. el lenguaje que usaremos en nuestras páginas ASP. ya que los objetos en nuestros diseños van a representar objetos presentes en el mundo real. en el caso de la herencia múltiple (una clase puede heredar de más de una clase). que pueden llegar a ser confusas. soporta herencia simple (cada clase sólo puede heredar de una única superclase). la encapsulación nos facilita el uso de objetos que no hemos implementado todavía. Además.28 - . Las tareas de análisis. diseño e implementación son más intuitivas. debido principalmente a que implica un cambio de mentalidad además de aprender un nuevo lenguaje orientado a objetos.

haciendo sencilla la reutilización de las funcionalidades de las clases padre. . la herencia y el polimorfismo. - Las subclases heredan las funciones miembro y las variables de sus clases padre. - El encapsulamiento separa la interfaz de la implementación ocultando los datos dentro del objeto y permitiendo el acceso a los datos de dicho objeto a través de funciones miembro (métodos).RECUERDE - Los lenguajes de programación orientados a objetos permiten el encapsulamiento.29 - . la abstracción. - El polimorfismo permite crear código genérico y reutilizable que podrá funcionar con una amplia gama de clases diferentes.

Tema 4

CREANDO UNA PÁGINA
BÁSICA

4.1. COMENTANDO EL EJEMPLO_____________________________ 34 4.2. SINTAXIS DE C# _______________________________________ 36 4.3. DECLARACIÓN DE VARIABLES ___________________________ 37 4.4. COMENTARIOS ________________________________________ 37 4.5. SENTENCIAS CONDICIONALES ___________________________ 38 4.5.1. Condicional if .. else______________________________ 38 4.5.2. Condicional múltiple switch ________________________ 38 4.6. BUCLES______________________________________________ 40 4.6.1. Bucle do .. while _________________________________ 40 4.6.2. Bucle while _____________________________________ 40 4.6.3. Bucle for _______________________________________ 41 4.6.4. Bucle foreach .. in ________________________________ 41 4.7. OPERADORES ________________________________________ 42 4.7.1. Operadores aritméticos____________________________ 42 4.7.2. Operadores lógicos_______________________________ 42 4.7.3. Operadores de asignación _________________________ 43 4.7.4. Operadores de comparación________________________ 43 4.7.5. Operador de concatenación ________________________ 43 4.7.6. Otros operadores ________________________________ 43 4.8. MANEJADORES DE EVENTOS ____________________________ 44 4.9. TRATAMIENTO DE ERRORES ____________________________ 44 4.10. DEFINICIÓN DE CLASES________________________________ 46 4.11. INSTANCIACIÓN DE CLASES ____________________________ 47 4.12. MODIFICADORES _____________________________________ 51 4.12.1. Modificadores de acceso__________________________ 51 4.12.2. Otros modificadores _____________________________ 52

- 31 -

NET.En este capítulo vamos a realizar una página ASP. } </script> <form id=”formulario” runat=”server” method=”post”> <asp:label id=”etiqueta” runat=”server”></asp:label> <asp:button id=”boton” runat=”server” onclick=”pulsado” text=”Púlsame”></asp:button> </form> </body> </html> Para poder ejecutar esta página ASP. y que se adapta mejor a los estándares de C++ y Java. . etiqueta. escribiendo en nuestro navegador http://localhost/holaMundo. tras comentar nuestro primer ejemplo. Por tanto. debemos escribir el código anterior en un fichero con extensión .33 - . Utilizaremos el lenguaje C# a lo largo del manual. EventArgs args) { etiqueta. veremos una introducción a la sintaxis de C#. por ser un lenguaje de última generación. colocarlo en un directorio de publicación en Internet (que además posea el permiso de ejecución de secuencias de comandos) y ejecutar la página a través del servidor Web (por ejemplo.aspx <html> <head> <title>Mi primera página ASP.aspx.NET: holaMundo. pensado para los desarrolladores Web. Nuestra primera página ASP.aspx).Text=”¡Hola Mundo!”.Style[“font-size”]=”20”.NET que muestra el famoso mensaje “Hola Mundo” cuando pulsemos sobre el botón incluido en la página.NET</title> </head> <body> <script language=”C#” runat=”server”> void pulsado (Object origen.

Este método trata el evento de pulsación del botón (onclick=”pulsado” en la definición del control <asp:button>).Al hacerlo.NET). se mostrará el mensaje ‘¡Hola Mundo!’.NET. .NET en el entorno Visual Studio . define un método que se ejecutará cuando el usuario pulse el botón que pertenece al Web Form (formulario Web en ASP. Este método no devuelve ningún valor (void) y recibe dos parámetros.34 - . como por ejemplo. y a continuación.Net 4.NET). Dentro del método accedemos al estilo de la etiqueta <asp:label id=”etiqueta”>. para darle un tamaño determinado. se indicaría aquí.1. Editando el código de nuestra primera página ASP. que ofrecen información acerca del evento que se ha producido (aunque en este ejemplo no usamos dichos parámetros porque no es necesario para mostrar nuestro mensaje). VB. COMENTANDO EL EJEMPLO El fragmento de código que aparece entre las etiquetas <script>. aparecerá una página vacía que presenta únicamente un botón con el texto ‘Púlsame’. Si hacemos click sobre él. donde se especifica que dicho código está escrito en C# (si hubiésemos utilizado otro lenguaje de los soportados por la plataforma . establecemos el valor de la propiedad Text de la etiqueta con el mensaje “¡Hola Mundo!”.

para indicar que se trata de un formulario de servidor. nos encontramos con la definición de un Web Form (formulario Web). Mediante los Web Forms de ASP. los corchetes ({}). que será el que va a contener la etiqueta y el botón. y el objeto Button es el botón que invocará el método pulsado( ) cuando el usuario haga click sobre él. Así. ya que forman parte de la página y se comportan como propiedades de la misma.aspx en el navegador . A continuación de la definición del método y del cierre de las etiquetas <script>.Podemos observar que. y el delimitador de bloques de código. en la que podemos indicar el método responsable de tratar el evento de pulsación. tenemos acceso a todos los controles. Dentro del formulario se encuentran dos controles Web que pertenencen a las clases Label y Button (en el capítulo 5 veremos los controles Web con más detalle). y modificar su propiedad Text. que inicialmente no tenía valor.NET. la diferencia está en la inclusión de la propiedad runat que posee el valor server. en el método pulsado utilizamos el identificador “etiqueta” para acceder al objeto Label. Estos dos controles tienen un atributo id. El control Button posee la propiedad onclick. que es el nombre a través del cual podremos acceder a sus propiedades. El control Label representa a la etiqueta que mostrará el mensaje en la página. Podemos ver que las sintaxis es muy similar a la utilizada para definir un formulario típico HTML. Resultado de la ejecución de nuestra página holaMundo.35 - . el delimitador de sentencias en C# es el punto y coma (.).

así por ejemplo. debemos tener cuidado al escribir nuestro código. por ejemplo. Los tipos simples del lenguaje C# se escriben con todas sus letras en minúscula. y que por tanto.2. Por lo tanto. los nombres de métodos y las clases tienen la primera letra de cada una de sus partes en mayúsculas. si queremos declarar una variable de tipo “long”.36 - . . propiedades. Por convención. tenemos la clase DropDownList. funciones o métodos. SINTAXIS DE C# El lenguaje C# presenta una serie de palabras básicas reservadas para el propio lenguaje. variables. Distingue entre mayúsculas y minúsculas. debemos escribir “long” y no “Long” o “LONG” (para el compilador del lenguaje estas tres palabras son palabras distintas). no podremos usar en nuestros nombres de clases.4. Estas palabras reservadas son: abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile while C# se asimila bastante a lenguajes como C++ o Java.

3. */ .”.4. este modificador debe aparecer antes del tipo de la variable. (Veremos los modificadores al final del capítulo). Si la variable posee algún modificador de acceso (como private o public) o de otro tipo.Todas las instrucciones en C# acaban con un punto y coma “. Siguiente línea de comentario. el tipo simple o clase. int num_aleatorio. El código comentado no se ejecutará. COMENTARIOS Podemos usar comentarios de línea simple o de un grupo de líneas: // Código comentado de línea simple /* Código comentado que ocupa varias líneas. Ejemplo: <script language=”C#” runat=”server”> string cadena. es decir. son los corchetes ({}). primero indicamos el tipo de la variable. </script> 4.37 - . DECLARACIÓN DE VARIABLES Para declarar una variable (tanto si es una referencia a un objeto o a un tipo simple). public DateTime fechaActual. y a continuación el nombre de la variable. El separador de bloques de código. como ya hemos mencionado. 4.

Condicional if .1. por eso va entre corchetes): if (expresión) { código para expresión “verdadera” } [else { código para expresión “falsa” }] Veamos un ejemplo de su uso: <%@ Page language=”C#” %> <html> <body> <% string color1= “rojo”.5. Condicional múltiple switch switch (expresión) { case expresión_constante1: código break.Equals(color2) ) { Response.4.5.Write (“Los colores son iguales”). else Su sintaxis es la siguiente (la inclusión de la sentencia “else” es opcional.2. if ( color1. } %> </body> </html> 4. string color2= “azul”. .5.38 - .Write (“Los colores son distintos”). }else { Response.. SENTENCIAS CONDICIONALES 4.

3”).39 - . break. } %> </body> </html> .Write (“Debe elegir una de estas respuestas: 1. [default: código break.Write (“Ha elegido la respuesta 2”).. break. case 2: Response. break.. default: Response.Write (“Ha elegido la respuesta 3”). . ] } Veamos un ejemplo de su uso: <%@ Page language=”C#” %> <html> <body> <% int respuesta = 3.Write (“Ha elegido la respuesta 1”). switch (respuesta) { case 1: Response. 2. break.case expresión_constante2: código break. case 3: Response.

Write (“Quedan “ + contador + ”segundos para el final<br>”)..2. Bucle do .6. } %> . Bucle while while (expresión) { código } Ejemplo de su uso: <% int contador= 0.6. while do { código } while (expresión) Ejemplo de su uso: <% int contador= 7. do { Response. while (contador <= 10) { Response. contador = contador – 1.Write ( contador + “<br>”).6.4. %> 4. } while (contador > 0). BUCLES 4. contador++.1.40 - .

Bucle for for (inicialización. expresión.4.”naranja”. } %> 4. in foreach (tipo identificador in expresión) { código } Este bucle suele utilizarse para recorrer los elementos de un array o de una colección.”negro”.3.. i<=10. Bucle foreach . foreach (string color in colores) { Response. i++) { Response. y por tanto.4.”azul”.Write ( color + “<br>”).6. Ejemplo de su uso: <% string [] colores = {“rojo”.41 - . } %> .6. iteradores) { código } Ejemplo de su uso: <% for (int i=0.”blanco” }. la expresión en este bucle será el nombre de un array o colección.Write ( i + “<br>”).

2.7. pero en el caso de que no se cumpla alguna expresión. % Módulo (resto de la división). ++ Operador de incremento. Devuelve true si una de las dos expresiones es verdadera. el resto de las Similar a |. comparaciones (tomándolas de izquierda a derecha) no se evaluarán y devolverá true. Operadores lógicos & | ^ ¡ && | | Devuelve true si las dos expresiones son verdaderas. * / Resta. algunos de los cuales ya hemos usado en los ejemplos anteriores para formar sentencias o expresiones condicionales. 4.42 - . false Literal y operador que devuelve el valor booleano de “falso”. pero en el caso de que se cumpla alguna expresión. Devuelve true si sólo una de las expresiones es verdadera. Multiplicación. OPERADORES En este apartado veremos los principales operadores del lenguaje C#.7. true Literal y operador que devuelve el valor booleano de “verdadero”. Similar a &. el resto de las comparaciones (tomándolas de izquierda a derecha) no se evaluarán y devolverá false. Operadores aritméticos + Suma. División. -Operador de decremento. 4. . Cambia una expresión de verdadera a falsa y viceversa.1.4.7.

4. ¡= Distinto que. Operadores de asignación = *= /= -= &= %= Operador básico de asignación.7.5. 4.4.6. Operador de índice.7. 4.7. >= Mayor o igual que. Operador de concatenación Este operador sirve para unir dos cadenas de texto (tipo string) en una sola. para acceder a los distintos elementos de un array. Menor que. [] ?: is Acceso a miembros de objetos (propiedades y métodos). > < Mayor que. Operador de módulo. Operadores de comparación == Igual que. sizeof Devuelve el tamaño en bytes de un tipo de datos. typeof Devuelve el tipo de un objeto.43 - .7. Operador de división. y es el operador “más” (+).3. Realiza una operación condicional en una sola línea. Operador de concatenación de cadenas. Operador de multiplicación. += Operador de suma. Su formato es: expresion? Caso-si-verdadero : caso-si-falso Para ver si un objeto es de un determinado tipo (o es compatible con dicho tipo debido a la herencia). <= Menor o igual que. Operador de resta. ^= Operador de potencia. Otros operadores . .4.

al comienzo de este capítulo). y que normalmente dependerán del tipo de evento a tratar.NET. en el que trataremos los Web Forms y los controles de ASP. que manejamos con las siguientes palabras reservadas: try: Con esta palabra clave definimos la zona de nuestro código que va a ser inspeccionada y tratada bajo la gestión estructurada de excepciones. pulsar un botón o cambiar la opción de un desplegable).4. se . 4. TRATAMIENTO DE ERRORES C# dispone de una serie de sentencias y mecanismos orientados a capturar los errores o situaciones anómalas que puedan ocurrir dentro de nuestros programas. EventArgs argumentos) { código de tratamiento del evento } Veremos con más detalle este tipo de métodos en el capítulo siguiente. La sintaxis general de un método para el tratamiento de eventos es la siguiente: void NombreMétodo (Object origen. el botón “púlsame”).8.44 - . El primero de estos parámetros es el control que generó el evento (en dicho ejemplo. Este tratamiento se conoce como gestión estructurada de excepciones. Estos métodos para el tratamiento de eventos poseen parámetros (recordemos el método “pulsado” de nuestra primera página ASP. MANEJADORES DE EVENTOS Estos son métodos especiales que se encargan del tratamiento de eventos en el cliente (por ejemplo. catch: Con esta palabra clave definimos el código que debe ejecutarse cuando se produce la excepción o situación anómala. que mostraba el mensaje “Hola mundo” al hacer click sobre el botón “púlsame”. Podemos tener múltiples catch para un solo try. pero que ejecutarán código de servidor. y el segundo parámetro serán los argumentos adicionales que necesite el método. para poder tratarlos de forma adecuada.9.NET.

Exception). se produzca o no una excepción en el bloque try } Veamos un ejemplo.Exception”. La sintaxis de un bloque try-catch-finally es la siguiente: try { código a inspeccionar } catch (tipo de excepción variable) { tratamiento de esta excepción } catch (tipo de excepción variable) { tratamiento de esta excepción } [ . <%@ Page language=”C#” %> <html> . el código que pongamos en este bloque.. throw: Esta sentencia se utiliza para “lanzar” una excepción. ] finally { código que siempre se ejecutará. independientemente de si se ha producido o no una excepción.DivideByZeroException”. y que nos encargaremos de capturar de forma adecuada mediante una sentencia “catch” para presentar al usuario un mensaje de error controlado. que deriva directamente de la clase “System. En el siguiente código se intenta realizar una operación matemática de división de un número por cero. debe ir seguida de un objeto que representa la excepción que se ha producido (debe ser un objeto que hereda de la clase System. Lanzar la excepción significa que dicho error puede propagarse y ser tratado en otro punto de la secuencia de llamadas a métodos..ejecutará aquel catch que tenga el tipo de excepción u error que se haya producido en la zona del try para esa ejecución.45 - . lo que dentro del entorno de ejecución causará una excepción del tipo “System. es decir. finally: Esta palabra clave define el código que se ejecutará siempre después de ejecutar un código dentro de una sentencia try. se ejecutará siempre.

DEFINICIÓN DE CLASES La sintaxis general para declarar una clase en C# es: using Namespace. int resultado. Podemos definir nuestra clase dentro de un Namespace. Excepcion: ” + error. }catch ( System. Cada namespace contiene un conjunto de clases relacionadas (como una librería). para ello utilizaremos la palabra clave namespace seguida del nombre que le damos a nuestro espacio con nombre. int numero2 = 0. para evitar conflictos de nombres (podemos tener clases con igual nombre en distintos namespaces). Un namespace es una forma de clasificar y organizar clases.<body> <% int numero1 = 50. No se puede dividir por cero. try { resultado = numero1 / numero2.DivideByZeroException error ) { Response. namespace NombreDeEspacio { modificadores class NombreDeClase : ClasePadre { implementación de la clase } } Incluiremos una sentencia using por cada uno de los espacios con nombre (NameSpace) que necesitemos.Message).10. } %> </body> </html> 4.46 - . .Write (“Se ha producido un error.

el nombre de la clase de la que heredamos. por ejemplo: int numero. sirven para definir las características de nuestra clase).NET cuenta con un recolector de basura que se encarga de liberar automáticamente todos los objetos creados mediante el operador new cuando detecta que el objeto deja de ser utilizado. Vamos a utilizar dos archivos distintos. string cadena=”Hola mundo”. el archivo “vehiculo. no para tipos básicos como int. Veamos un ejemplo de clases.aspx. dentro del espacio de nombres “aplicacionWeb” y. Su sintaxis es la siguiente: Clase nombre_objeto = new Clase ( ). por otro lado. En esta declaración aparecen los modificadores de la clase (veremos lo modificadores en el siguiente apartado. long. etc. Para los tipos básicos es suficiente una declaración indicando el tipo de la variable. El CLR de Microsoft . el sistema llama automáticamente al constructor de la clase. utilizamos el operador new. . INSTANCIACIÓN DE CLASES Para crear una nueva instancia de una clase (nuestra o de las proporcionadas por el entorno). donde se inicializan las propiedades de la actual instancia (objeto) que estamos creando. char. Por un lado. Si nuestra clase hereda de una clase padre (superclase). 4. la palabra reservada class y el nombre que hemos elegido para la clase que estamos definiendo.cs” que contiene una clase denominada “vehiculo”. Cuando se utiliza este operador. Este operador informa al sistema de que queremos crear un nuevo objeto y asignarlo a un nombre de objeto que elegimos.47 - . El operador new se utiliza para crear nuevos objetos. Después.11. donde definimos sus propiedades y métodos. bool.NET pagina. la página ASP. seguido del nombre dado a la variable. entre las dos llaves escribimos la implementación de la clase. lo indicaremos poniendo los dos puntos ( : ) y a continuación.Entre las llaves del Namespace incluimos la declaración de la clase.

aspx. y la interfaz de usuario (la presentación de la aplicación) en el archivo .cs using System. namespace aplicacionWeb { public class vehiculo { private int n_puertas = 0. public vehiculo (int num_puertas. consiste en separar la interfaz de usuario de la lógica de la aplicación. código por detrás o código oculto). La lógica se encuentra en el archivo . marca = nombre_marca.Esta técnica de separación de código es muy utilizada en la plataforma ASP. } public string getMarca( ) return marca.NET (se denomina CodeBehind. string nombre_marca) n_puertas = num_puertas.48 - . Archivo vehiculo.cs (la definición de la clase). private string marca = ” ”. } } } { { { . } public int getNumeroPuertas( ) return n_puertas.

cs” %> <%@ import namespace=”aplicacionWeb” %> <html> <head> <title> Ejemplo de clases </title> </head> <body> <% vehiculo coche1 = new vehiculo(5.cs en Visual Studio .49 - .Editando el código del archivo vehículo.NET Archivo pagina.aspx <%@ Page language=”c#” %> <%@ Assembly src=”vehiculo.”Renault”). %> La marca del coche es: <% =coche1.getMarca() %> .

y una vez que ya tenemos creado nuestro objeto.cs). creamos una nueva instancia de la clase “vehiculo” mediante el operador new. podemos acceder a sus métodos miembro disponibles (getMarca y getNumeroPuertas).getNumeroPuertas() %> </body> </html> Editando el código del archivo pagina. . Lo inicializamos con 5 puertas y marca Renault (valor para sus propiedades). y la directiva import especifica el espacio de nombres utilizado.NET La directiva Assembly indica la localización del código fuente (en el archivo vehiculo.50 - .<br> El número de puertas es: <% =coche1.aspx en Visual Studio . En este ejemplo.

12. objetos.51 - . Disponemos de los siguientes: public: Informa al entorno de que la propiedad o método es accesible desde cualquier clase o parte del programa. ni siquiera desde las subclases que hereden de la clase que contiene los miembros private). variables o métodos. private: Con este modificador informamos al sistema de que la propiedad o método únicamente es accesible desde los métodos internos de la misma clase (es decir.12. MODIFICADORES Los modificadores son palabras clave cuya función es especificar el ámbito o cualidades de nuestras clases.Resultado de la ejecución de nuestro ejemplo de clases 4. 4. sólo podemos acceder a un miembro private desde la propia clase. no desde otras clases. Modificadores de acceso Estos modificadores se encargan de especificar el nivel de accesibilidad de los miembros de las clases (propiedades y métodos). Este modificador otorga el máximo nivel de accesibilidad. .1.

y su valor no puede modificarse.2.NET Framework. 4.- protected: Los miembros protected son accesibles desde la propia clase donde se encuentran. e indica que la implementación de dicho método es realizada de forma externa. sin tener que crear un nuevo objeto de esa clase. readonly: Este modificador marca a una propiedad como de sólo lectura (pero puede inicializarse dentro de un constructor de dicha clase). es decir. - internal: Los miembros que llevan este modificador sólo son accesibles desde los archivos del mismo proyecto. aplicables a clases o miembros de clase: abstract: Las clases abstractas son aquellas que no tienen la implementación de todos sus métodos. y significa que la clase no se puede heredar. . sino que sirven como clase base a otras clases. static: Este modificador indica que la propiedad o método de una clase pertenece al propio tipo o clase. sealed: Es aplicable exclusivamente a las clases. const: Este modificador indica que la propiedad de clase o variable es una constante. y desde las clases derivadas de ella.12. el elemento static no se crea por cada instancia de la clase.52 - . extern: Este modificador se aplica a un método. Las clases abstractas no pueden ser instanciadas directamente (mediante el operador new). donde se proporcionará la implementación de esos métodos no implementados. Podemos acceder a los miembros estáticos a través de su clase. tiene carácter de sólo lectura. sino que contienen algún método no implementado. Otros modificadores El lenguaje C# dispone de otra serie de modificadores. es decir. mediante la inclusión de alguna librería externa a .

- override: Se utiliza para generar una nueva implementación de una función virtual de una clase. .- virtual: Este modificador marca a un método para que las clases derivadas puedan implementarlo. Aparece en las clases derivadas de una clase base (abstracta) para implementar funcionalidad específica a dichas clases derivadas.53 - .

bucles.NET. . con la que controlar los errores o las situaciones anómalas que puedan ocurrir durante la ejecución de nuestra aplicación. Distingue entre mayúsculas y minúsculas. Es un lenguaje orientado a objetos.54 - . modificadores.RECUERDE - C# es uno de los lenguajes más utilizados en la plataforma . que permite aplicar los mecanismos propios de la POO. como derivación. etc). Cuenta con las estructuras típicas (sentencias condicionales. - - - - Permite separar la interfaz de usuario de la lógica de la aplicación (técnica Code-Behind). Permite una gestión estructurada de excepciones. operadores. abstracción o encapsulamiento. - - Su sintaxis es bastante similar a C++ o Java.

7. Métodos de la clase Page __________________________ 61 5.2. Propiedades de la clase Page ______________________ 59 5.1.3.1. EJEMPLOS CON CONTROLES WEB _______________________ 74 . INTRODUCCIÓN A LOS CONTROLES WEB __________________ 71 5.1.3.2. INTRODUCCIÓN A LOS CONTROLES DE SERVIDOR DE ASP.55 - .Tema 5 CONCEPTOS DE WEB FORMS 5. INTRODUCCIÓN A LOS CONTROLES HTML _________________ 64 5.1.6.4.1. LA CLASE PAGE _______________________________________ 57 5. Eventos de la página _____________________________ 57 5. EJEMPLOS CON CONTROLES HTML ______________________ 66 5.NET 63 5.5. WEB FORMS __________________________________________ 61 5.

.

A continuación.TemplateControl. se crean una serie de componentes que constituyen la página solicitada y que se compilan en una unidad. Los distintos componentes compilados dan lugar a un objeto de la clase Object.NET a un servidor Web. las clases que contiene el código de la página. Los eventos se producen en un orden determinado a lo largo de la carga de la página: Init: este evento es lanzado cuando la página es inicializada.Page.NET nos ofrece una serie de eventos que nos permiten estructurar el código en las páginas.NET actual como un objeto de esta clase. . propiedades y métodos que nos ofrece la clase Page: 5. ya que podemos decir que el objeto instancia de esta clase Page.57 - . es decir.ASPX solicitado. Eventos de la página ASP. En ese momento.1. vamos a comentar los principales eventos. Esta clase se crea de forma dinámica.1. Este evento es tratado en el método Page_Init. 5.En este capítulo veremos una introducción a los controles Web que pueden utilizarse en un Web Form (formulario ASP. por lo que antes vamos a ver la clase Page. métodos y eventos. representa a la página ASP. Estos controles los incluiremos en una página ASP.ASPX en el servidor. los controles de la página. etc. y se instanciará cada vez que se realice una petición del fichero .1. Este objeto nos sirve como contenedor de todos los componentes que constituyen la página.Control. Estos eventos no existían en la versión anterior de ASP. Dentro del código de una página siempre vamos a tener acceso a la clase Page.NET actual. y nos permite acceder a sus propiedades. un cliente a través de un navegador Web solicita una URL que indica un fichero .NET. Estos componentes pueden ser: el fichero . todavía no se han creado por completo los distintos controles de la página.ASPX. LA CLASE PAGE Cada vez que pedimos una página ASP. ya que podemos representar a la página ASP.NET).

- Load: este evento se lanza a continuación del método Init y tiene lugar cuando la página se ha cargado. } void Page_Load (Object origen. Lo tratamos en el método Page_PreRender. EventArgs args) { Page. se ha terminado la ejecución de la página y toda la información ha sido enviada al cliente. } </script> <body> <form id=”formulario” runat=”server” method=”post”> . - PreRender: este evento tiene lugar justo antes de enviar la información al cliente. la página ha finalizado de procesarse.Write (“Se ha lanzado el Evento PreRender<br>”).Response.aspx <html> <head> <title>Ejemplo de ejecución de los eventos en una página ASP.NET</title> </head> <script language=”C#” runat=”server”> void Page_Init (Object origen. Siempre es lanzado después del evento Load. - UnLoad: este evento se lanzará en último lugar. Este evento se lanzará cada vez que la página es ejecutada.Write (“Se ha lanzado el Evento Load<br>”). EventArgs args) { Page. todos los controles de la página ya han sido creados. En este momento. En este momento.Response. Este evento lo tratamos en el método Page_Load. Este evento lo tratamos en el método Page_UnLoad Veamos un sencillo ejemplo de uso de estos métodos: ejemploEventos. después de haber tenido lugar todos los anteriores. } void Page_PreRender (Object origen.Write (“Se ha lanzado el Evento Init<br>”).58 - . EventArgs args) { Page.Response.

por ejemplo: Page. .Write (“Hola Mundo”).Response. Propiedades de la clase Page Para acceder a una propiedad de la clase Page podemos indicar delante de la propiedad la clase Page o utilizar la propiedad directamente.2. es equivalente a: Response.Write (“Hola Mundo”).<asp:label id=”etiqueta” runat=”server”>Eventos de la página</asp:label> </form> </body> </html> Al ejecutar este ejemplo veremos una serie de mensajes que ilustran el orden de ejecución de los distintos eventos que tratamos: 5.59 - .1.

su valor es true.Web.HttpRequest (es equivalente al antiguo objeto integrado Request del ASP 3). ClientTarget: es un objeto de la clase String. En ASP. Request: esta propiedad es una referencia a un objeto de la clase System.HttpResponse (es equivalente al antiguo objeto integrado Response del ASP 3). devuelve true si la página actual ya ha sido enviada al servidor en alguna ocasión. Esta propiedad nos permite manipular la respuesta devuelta al cliente que ha realizado la petición de la página.Web. nos permite desactivar el mantenimiento del estado entre distintas llamadas de los controles Web de la página.NET los objetos se crean de distinta manera. Esta propiedad nos permite acceder a toda la información necesaria de la petición del protocolo HTTP que ha sido utilizada para solicitar la página del servidor Web. Este indicador nos servirá para inicializar los controles Web y propiedades de la página. Entre sus principales funcionalidades estaba la creación de componentes existentes en el servidor. este objeto representa la respuesta HTTP que se envía al cliente. Si tiene el valor false significa que es la primera vez que se carga la página.Las propiedades principales de la clase Page son: Application: esta propiedad es una referencia a un objeto de la clase System. Nos permite almacenar y acceder a información compartida y común a toda la aplicación Web.Web. es decir. Server: este atributo es una referencia a un objeto de la clase System. nos permite sobrescribir la detección automática de navegador Web ofrecida por ASP. Response: esta propiedad es una referencia a un objeto de la clase System.NET. IsPostBack: propiedad de tipo Boolean. Esta propiedad es equivalente al objeto integrado Application de ASP 3.60 - . importamos el espacio de nombres . Por defecto.HttpApplicationState.HttpServerUtility (tiene la misma funcionalidad del antiguo objeto integrado Server del ASP 3). EnableViewState: propiedad de tipo Boolean.Web.

. que le pasamos como parámetro. en una URL absoluta. Esta propiedad es equivalente al objeto integrado Session de ASP 3.61 - . Métodos de la clase Page Veamos una descripción de algunos de los métodos que nos ofrece la clase Page: FindControl: este método realiza una búsqueda en la página del control Web cuyo nombre se pasa como parámetro.necesario (para tener acceso a todas sus clases) y a través del operador new creamos nuevas instancias de objetos. WEB FORMS Los Web Forms (formularios Web) son una característica de ASP. El parámetro que recibe es un objeto de la clase String que representa el nombre del control buscado. MapPath: este método devuelve un objeto de la clase String que representa una ruta virtual construida a partir de la ruta física que se le pasa como parámetro. Session: esta propiedad es una referencia a un objeto de la clase System.Web. 5. 5.1. Sobre este objeto debemos aplicar el casting al control Web esperado para poder acceder a sus miembros. y nos va a permitir generar contenidos dinámicos de una forma más sencilla.3. que también es un objeto de la clase String. User: esta propiedad devuelve información sobre el usuario que ha solicitado la página ASP.NET para cada usuario. ResolveUrl: método que convierte una URL virtual.NET que ofrece un nuevo modelo programación (no existía en versiones anteriores de ASP). Nos permite almacenar información entre diferentes páginas incluidas en una misma aplicación ASP. y el objeto devuelto corresponde a la clase Control.NET.2.HttpSessionState.SessionState. y devuelve dicho control (si lo encuentra).

con código que será ejecutado en el servidor Web. y arrastrarlos y soltarlos hasta la vista de diseño). e incluir la propiedad runat con el valor server. al enviarlo.NET.NET que necesitemos para recoger la información correspondiente. Integra el tratamiento de eventos del cliente con el código correspondiente en el servidor.NET. de forma automática se van a mantener estos valores en el caso de que se vuelva a recargar el formulario. Permiten el tratamiento de los eventos del cliente con código ASP. Se ahorra tiempo de desarrollo en crear la interfaz de usuario y además podemos reutilizar estos controles que encapsulan su funcionalidad.NET podemos usar los distintos controles que nos suministran distintas paletas. - . El código resultante es más limpio en la página. Por ejemplo: <form id=”MiWebForm” method=”post” runat=”server”> </form> Dentro del formulario Web colocaremos los distintos controles de servidor de ASP. si seleccionamos una serie de valores en el Web Form.62 - . Para crear un formulario Web únicamente debemos utilizar una etiqueta <form>.NET ofrece una mayor separación entre la lógica de la aplicación y la presentación de la misma. Es un Web Form quien va a generar el código HTML correspondiente al formulario que estamos diseñando.Los Web Forms sustituyen a los formularios HTML dentro del entorno de programación de ASP. Este modelo de programación ofrece algunas ventajas con respecto al modelo anterior de ASP: Ofrece un modelo de programación más visual (en el entorno Visual Studio . Lleva a cabo el mantenimiento del estado del formulario de forma automática entre peticiones. Estos controles van a realizar las mismas funciones que los típicos controles del lenguaje HTML que constituían los campos de un formulario. ya que no aparece mezclado con código HTML como ocurría en las versiones anteriores de ASP (donde lo habitual es mezclar código HTML con código ASP). es decir. esto significa que. al estilo de las etiquetas del lenguaje HTML. ASP.

Con este nuevo modelo.NET son una serie de objetos de servidor que generarán el correspondiente código HTML para que el usuario pueda visualizarlos y utilizarlos en la página cargada en su navegador. los que este lenguaje define para su uso en formularios. . éstos los veremos en el próximo capítulo).NET Framework. Estos controles se encargan de manejar los eventos generados por el cliente (como la pulsación de un botón.5. Podemos realizar la siguiente clasificación: Controles HTML: representan controles puramente HTML. INTRODUCCIÓN A LOS CONTROLES DE SERVIDOR DE ASP.NET Los controles ASP. Controles avanzados : cada vez se desarrollan más controles de este tipo. colocando los elementos de forma secuencial. Controles de lista: utilizados para distribuir y mostrar datos en una página (son los controles DataList y DataGrid. selección de una opción en un desplegable. ya no es necesario utilizar los típicos campos de formulario de HTML que usábamos junto con ASP 3. mediante coordenadas X e Y. podemos utilizar dos formas distintas de definir el posicionamiento de nuestros controles: GridLayout: permite un posicionamiento dinámico de los elementos. Existe un gran número de controles de servidor y cada uno de ellos pertenece a una clase del paquete . mediante párrafos y tablas.NET trae preconfigurados y que implementan elementos más complejos. como controles para rotar anuncios en nuestras páginas o para simular un calendario completo. Cada control de servidor se corresponde con una clase determinada perteneciente a un espacio de nombres determinado.3. FlowLayout: este sistema utiliza el método tradicional de HTML de posicionamiento. que ofrecen funcionalidades avanzadas. etc). Se realiza gracias a la integración en los navegadores de las hojas de estilo en cascada y su posicionamiento dinámico de elementos HTML. Controles Web: son otros componentes que ASP.NET para diseñar nuestras páginas Web.63 - . Cuando utilizamos Visual Studio .

los controles Web (que también veremos en este capítulo).Web.64 - .5. Para realizar el tratamiento de eventos de estos controles con código de servidor. Estos controles tienen el mismo aspecto que una etiqueta HTML. y por lo tanto cada uno de ellos poseerá sus propiedades y métodos.UI. utilizaremos el atributo onserverevento. de manera que. Éstas son las clases que ofrecen al desarrollador el acceso en el servidor a las distintas etiquetas HTML que finalmente se enviarán al cliente Web como resultado de la ejecución de la página ASP. y así utilizar el código de servidor para acceder a sus métodos o manipular sus propiedades. A continuación vamos a ver una descripción de las distintas clases que se corresponden con los controles HTML.NET. INTRODUCCIÓN A LOS CONTROLES HTML La sintaxis que ofrecen los controles HTML de servidor es muy similar a la sintaxis de los controles clásicos del lenguaje HTML. A este atributo se le indica como valor el nombre del método que queremos ejecutar. simplemente debemos indicar la propiedad runat con el valor server.NET correspondiente. Cada control del formulario es un objeto (objetos de la página ASP.HtmlControls. Así. Estas clases se encuentran dentro del espacio de nombres System. una instancia de una clase determinada. es decir.4.NET). Para identificar de forma única un control ASP. La lista de los controles HTML que vienen predefinidos en el sistema ASP. a excepción de que presentan el atributo runat con el valor server.NET son los siguientes: . Otra diferencia es que posee un atributo especial para el tratamiento de eventos del cliente con código del servidor. Mediante este identificador podemos hacer referencia al objeto correspondiente en la página. la sintaxis general de un control HTML es: <input type=”elementoHTML” id=”identificador” runat=”server”> Los controles HTML están disponibles para mantener la compatibilidad con versiones anteriores de ASP. se utilizan el siguiente tipo de controles. Normalmente. Estos controles ofrecen la potencia de los Web Forms y mantienen la familiaridad y facilidad de uso de las etiquetas HTML que representan los campos de un formulario. debemos utilizar la propiedad id. si queremos que una etiqueta HTML pase a ser un control HTML.

- HTMLAnchor: Representa a la etiqueta <a>. - HTMLButton: Representa a los botones de pulsación para formularios HTML del tipo button. . que se utiliza para mostrar imágenes.<div> o <body>).NET Framework (como las etiquetas <span>. Esta clase permite definir un Web Form. HTMLForm: Representa a la etiqueta <form> de HTML. que es una casilla de verificación de HTML. - HTMLInputHidden: Representa al elemento <input type=”hidden”>. - HTMLButton: Representa a la etiqueta <button> de HTML. - HTMLImage: Representa a la etiqueta <img> de HTML. que es una imagen que presenta una funcionalidad de envío de un formulario HTML. es el control HTML que nos permite manejar enlaces. - HTMLInputFile: Representa al elemento <input type=”file”>. - HTMLInputCheckBox: Representa al elemento <input type=”checkbox”>. todos los controles que deseemos enviar al servidor (método post) debemos incluirlos dentro de un control de la clase HtmlForm. que se utiliza para subir ficheros desde el cliente al servidor. - - HTMLGenericControl: Esta clase se utiliza para respresentar las etiquetas HTML que no tienen una correspondencia directa con las clases del paquete . que es un control invisible para almacenar valores alfanuméricos. - HTMLInputRadioButton: Representa al elemento <input type=”radio”>. que es un botón de pulsación. submit y reset (botón normal. que es una casilla de opción de HTML. que va a realizar la labor de contenedor para los controles de servidor dentro de la página. es decir. de envío y de restauración del formulario). es decir.65 - . - HTMLInputimage: Representa al elemento <input type=”image”>.

HTMLTextArea: Este control permite manipular en el servidor la etiqueta <textarea>.- HTMLInputText: Representa a los elementos <input type=”text”> y <input type=”password”>. Paleta de controles HTML en Visual Studio . Esta clase posee una colección llamada Rows. EJEMPLOS CON CONTROLES HTML ejemplo1.NET</title> . es decir. HTMLTableCell: Esta clase permite el acceso a las celdas de una tabla.5. HTMLTableRow: Es el control HTML que permite manipular una fila de una tabla. HTMLTable: Este control se corresponde con una tabla del lenguaje HTML.66 - . se corresponde con las etiquetas <td> y <th>. que son cajas de texto y contraseña de un formulario HTML. HTMLSelect: Representa al elemento <select”> que es un desplegable de un formulario HTML. que es una caja de texto de gran capacidad en un formulario HTML. que contiene objetos de la clase HTMLTableRow. y por tanto. permite el acceso desde el servidor a una etiqueta <table>.aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles HTML en una página ASP.NET 5.

que permite tener acceso a las propiedades y métodos de cada control del formulario). sino que hemos accedido a las propiedades de los controles a través del nombre con el que los hemos declarado (el valor del atributo id. es decir. .67 - . Al pulsar el botón se muestra el elemento seleccionado de la lista en un texto de un elemento <div>. EventArgs args) { etiqueta.InnerText=lista. Esto es posible gracias a que el Web Form genera un campo oculto que conserva los valores de los campos del formulario. podremos observar que se mantiene el estado del mismo.Value.</head> <script language=”C#” runat=”server”> void cambia (Object origen. sin que tengamos que escribir ningún código adicional para controlarlo. Accedemos a la propiedad innerText de la etiqueta para asignarle el valor obtenido de la lista desplegable. } </script> <body> <form id=”formulario” runat=”server” method=”post”> <select id=”lista” runat=”server”> <option selected>Azul</option> <option>Rojo</option> <option>Verde</option> <option>Blanco</option> </select> <input type=”button” id=”boton” runat=”server” value=”Seleccione un color” onserverclick=”cambia”> <div id=”etiqueta” runat=”server”></div> </form> </body> </html> Este ejemplo muestra una lista desplegable con una serie de nombres de colores y un botón. en el combo se mantiene el elemento seleccionado. Si hacemos distintas llamadas al formulario. Podemos comprobar que no se ha utilizado la colección Form del objeto Request para obtener los valores de los elementos enviados en el formulario (como se hacía habitualmente en ASP 3).

aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles HTML en una página ASP. EventArgs args) { cuerpo.Resultado de ejecutar ejemplo1.NET</title> </head> <script language=”C#” runat=”server”> void cambiaColor (Object origen.aspx en el navegador Ejemplo2.Value. } </script> <body id=”cuerpo” runat=”server”> <form id=”formulario” runat=”server” method=”post”> <select id=”lista” runat=”server”> <option value=”blue” selected>Azul</option> <option value=”red”>Rojo</option> .Style[“background-color”]=lista.68 - .

En este caso se manipula la propiedad background-color. y dos objetos de las clases HtmllnputButton y HtmlSelect. En este ejemplo podemos ver cómo aplicar estilos a los controles ASP.aspx en el navegador . y pulsar el botón. que funciona como una colección permitiendo acceder a las distintas propiedades del control que representan los atributos de las hojas de estilo. Para ello.69 - . para establecer el color de fondo de la página actual. usamos la propiedad Style del control.<option value=”yellow”>Amarillo</option> <option value=”green”>Verde</option> </select> <input type=”button” id=”boton” runat=”server” value=”Seleccione un color” onserverclick=”cambiaColor”> </form> </body> </html> En este ejemplo utilizamos un control HTML de la clase HtmlGenericControl. se mostrará el documento HTML con el color de fondo seleccionado en el combo. Resultado de ejecutar ejemplo2.NET. que se corresponden con el botón y la lista desplegable del formulario. Al seleccionar un elemento de la lista (un color).

Src=texto.Ejemplo3. EventArgs args) { imagen.NET</title> </head> <script language=”C#” runat=”server”> void cambiaImagen (Object origen. La imagen se actualiza con la que indiquemos cada vez que se pulse el botón del formulario. Resultado de ejecutar ejemplo3.Value.aspx en el navegador .70 - .aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles HTML en una página ASP. } </script> <body id=”cuerpo” runat=”server”> <form id=”formulario” runat=”server” method=”post”> <input type=”text” runat=”server” id=”texto”> <input type=”button” id=”boton” runat=”server” value=”Cambia” onserverclick=”cambiaImagen”> <img src=”imagen1.gif” runat=”server” id=”imagen”> </form> </body> </html> En este ejemplo se muestra la imagen que se indica en la caja de texto.

UI. pues. en los controles Web utilizamos la propiedad OnClick. pero su sintaxis es distinta. a través de algún lenguaje de script de cliente. también podemos usar esta otra forma de sintaxis: <asp:nombreControl id=”identificador” runat=”server” /> Además de la diferencia de sintaxis. entre los controles HTML y controles Web. eventos que son tratados por rutinas. Ofrecen un nivel de abstracción mayor que los anteriores.5.71 - .6. el control Web determina el navegador que ha realizado la petición. y de acuerdo con esta información genera el código HTML apropiado y específico para ese navegador Web).WebControls. INTRODUCCIÓN A LOS CONTROLES WEB Estos controles cumplen la misma funcionalidad que los anteriores. y de cliente. es decir. como JavaScript). Sin embargo. no existe una correspondencia directa entre los controles y las etiquetas HTML que se generan (como sucedía con los controles HTML). los controles HTML. Para indicar los métodos para el tratamiento de eventos de la pulsación de un botón del ratón en los controles HTML hemos visto que utilizamos la propiedad onserverclick.Web. código que se ejecuta en el servidor. por ejemplo. está basada en XML. En los controles HTML se debe distinguir si se trata de un evento de cliente o de servidor (ya que podemos tratar ambos tipos. Estos controles pertenecen al espacio de nombres System. y además. y sin embargo el control Web equivalente posee la propiedad text para mostrar el texto del botón. La sintaxis general de un control Web es : <asp:nombreControl id=”identificador” runat=”server”></asp:nombreControl> Cuando el control Web no tiene cuerpo. . y su modelo de objetos no refleja la sintaxis HTML necesariamente (cuando la página se carga en el navegador. de servidor como hemos visto en el apartado de controles HTML. el control HTML button posee la propiedad value. algunos nombres de propiedades también cambian. desde los controles Web sólo tenemos la posibilidad de utilizar eventos de servidor.

NET (para una referencia completa de todos ellos. generará en el cliente una etiqueta <a>. CheckBox: Este control Web representa una casilla de verificación. A continuación vamos a ver los principales controles Web que vienen predefinidos en el sistema ASP. y se corresponde con la etiqueta <select> de HTML. Para indicar la imagen que queremos mostrar. al pulsar sobre la imagen se envían los contenidos del formulario al servidor.72 - . . Se corresponde con la etiqueta <input type=”submit”>. de esta forma podemos utilizar el objeto que se corresponde con el control de servidor para utilizar sus métodos o manipular sus propiedades. es decir. HiperLink: Representa un elemento de hipervínculo (enlace) a otra página. para permitir hacer referencia a los controles dentro del código fuente de la página. DropDownList: Este control representa una lista desplegable. El evento que se lanza al pulsar sobre un CheckBox es el evento CheckedChanged. Generará como resultado de su ejecución una etiqueta <img> de HTML. un botón que envía el contenido de un formulario al servidor. Se corresponde con la etiqueta <input type=”checkbox”>. utilizamos la propiedad OnClick de la clase Button. Este objeto posee una colección Items que contiene todos los objetos CheckBox. ImageButton: Este control representa una imagen que actúa como botón tipo submit. Generará como resultado de su ejecución una etiqueta <input type=”image”> de HTML. utilizaremos la propiedad ImageURL. debemos consultar la referencia técnica de Microsoft): Button: Este control Web representa un botón.Al igual que ocurría con los controles HTML. Para tratar el evento de pulsación del botón. Para utilizar checkbox múltiples podemos usar el control CheckBoxList. por lo tanto. es decir. CheckBoxList: Este control permite utilizar una lista de selección múltiple de elementos checkbox. debemos utilizar el atributo id. Image: Este control representa una imagen.

73 - . Este control es parecido al control CheckBoxList. Esta clase posee una colección llamada Rows. En su propiedad Rows indicamos el número de filas visibles que va a mostrar el control. podemos usar estilos para mejorar y personalizar el aspecto los controles. pero ofrece la misma funcionalidad que un control Button. - RadioButtonList: Este control representa una lista selección múltiple de elementos RadioButton. que contiene objetos de la clase TableRow. pero en este caso se muestran varios elementos de la lista y se permite la selección múltiple. mediante la utilización de todos ellos podemos generar tablas en HTML. el objeto TableRow tiene una colección llamada Cells. es similar al control DropDownList. - RadioButton: Representa un botón de opción que se corresponde con el elemento <input type=”radio”> de HTML. - ListBox: Representa a un cuadro de lista. y en la propiedad SelectionMode indicamos si se permite la selección múltiple (valor Multiple) o bien la selección simple (valor Single. pero en este caso se utilizan controles RadioButton en lugar de CheckBox. - Style: Este control representa al estilo (CSS) de un control de servidor. Generará como resultado de su ejecución una etiqueta <span> de HTML. El control Table representa una tabla (etiqueta <table> de HTML). Las opciones se agrupan mediante la propiedad GroupName. - Table. TableRow y TableCell: Estos controles están muy relacionados entre sí. Permite seleccionar una opción dentro de un mismo grupo de opciones. es decir. es el valor por defecto). que contiene las columnas para esa fila de la tabla. A su vez. . su apariencia es similar a un control Hiperlink. es decir. Posee una colección Items que contiene todos los objetos RadioButton.- Label: Representa una etiqueta de texto. Posee una propiedad Controls que es una colección que contiene todos los controles incluidos dentro del objeto Panel. presenta un texto a modo de enlace que al pulsarlo enviará el formulario en el que se encuentre al servidor. - Panel: Este control se utiliza para agrupar controles (actúa como contenedor de otros controles). - LinkButton: Este control representa un botón que presenta un estilo similar a los enlaces. y que representan las filas de la tabla.

EJEMPLOS CON CONTROLES WEB ejemplo4.74 - . .7.- TextBox: Este control representa una caja de texto.SelectedItem. Xml: Este control se utiliza para mostrar un documento XML en la página.Text.aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP.NET 5.NET</title> </head> <script language=”C#” runat=”server”> void cambia (Object origen.Text=”Ha seleccionado ” + lista. EventArgs args) { etiqueta. - Creando un Web Form en la vista diseño de Visual Studio .

y un botón.75 - .aspx en el navegador . se muestra el elemento elegido de la lista en una etiqueta. Al seleccionar un elemento de la lista y pulsar el botón. Resultado de ejecutar ejemplo4.} </script> <body> <form id=”formulario” runat=”server” method=”post”> <asp:ListBox id=”lista” runat=”server”> <asp:ListItem selected>Java</asp:ListItem> <asp:ListItem>ASP</asp:ListItem> <asp:ListItem> PHP</asp:ListItem> <asp:ListItem>JSP</asp:ListItem> </asp:ListBox> <asp:Button id=”boton” runat=”server” Text=”Seleccione un lenguaje” OnClick=”cambia” /><br> <asp:Label id=”etiqueta” runat=”server” /> </form> </body> </html> Este ejemplo muestra un formulario con una lista desplegable con los nombres de distintos lenguajes de programación.

Text = ”Fecha/Hora actuales: ” + ahora. EventArgs args) { DateTime ahora.ejemplo5.NET</title> </head> <script language=”C#” runat=”server”> void obtenerFecha (Object origen. etiqueta. Resultado de ejecutar ejemplo5.aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP.aspx en el navegador . ahora = DateTime.Now.ToString().76 - . } </script> <body> <form id=”formulario” runat=”server” method=”post”> <asp:Button id=”boton” runat=”server” Text=”Obtener fecha” OnClick=”obtenerFecha” /><br> <asp:Label id=”etiqueta” runat=”server” /> </form> </body> </html> En este ejemplo se muestra la fecha y hora actuales en un objeto de la clase Label al capturar el evento de pulsación del botón.

Checked == true) { etiqueta.Text = ”La casilla de verificación está marcada ”.aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP. } } </script> <body> <form id=”formulario” runat=”server” method=”post”> <asp:CheckBox id=”casilla” runat=”server” Text=”Casilla de verificación” /><br> <asp:Button id=”boton” runat=”server” Text=”Comprobar” OnClick=”compruebaCasilla” /><br> <asp:Label id=”etiqueta” runat=”server” /> </form> </body> </html> En este ejemplo al pulsar el botón se comprueba si el objeto de la clase Checkbox se encuentra marcado o no y se muestra un mensaje indicándolo en un objeto de la clase Label.Ejemplo6.aspx en el navegador .NET</title> </head> <script language=”C#” runat=”server”> void compruebaCasilla (Object origen. Resultado de ejecutar ejemplo6. }else { etiqueta.77 - .Text = ”La casilla de verificación no está marcada ”. EventArgs args) { if (casilla.

NET</title> <style> .estilo{ font: 14px verdana.aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP. Resultado de ejecutar ejemplo7. A esta propiedad le asignaremos el nombre de la clase que define el estilo que se desea aplicar al control.aspx en el navegador .Ejemplo7. background-color:#CCCCCC } </style> </head> <body> <asp:Label id=”etiqueta” runat=”server” CssClass=”estilo” > Ejemplo de aplicación de estilos sobre un control Web Label</asp:Label> </body> </html> Podemos aplicar un estilo a un control Web a través de la propiedad CssClass.78 - . color: red.

Blue. .79 - . EventArgs args) { Style estilo = new Style().Size=16. para tener acceso a las clases Color y BorderStyle. estilo.Name=”Courier”.ApplyStyle(estilo). estilo.Pink. estilo.Italic=true. Este método recibe como parámetro un objeto de la clase Style (cuyas propiedades contienen los valores del estilo).ForeColor=Color.BorderColor=Color.Drawing” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP. etiqueta. estilo. estilo.Font. estilo. } </script> <body> <asp:Label id=”etiqueta” runat=”server” > Ejemplo de aplicación de estilos sobre un control Web </asp:Label> </body> </html> Otra forma de aplicar un estilo a un control Web es a través del método ApplyStyle.aspx <%@ Page language =”c#” %> <%@ Import Namespace =”System.Font.Ejemplo8.Green.NET</title> </head> <script language=”C#” runat=”server”> void PageLoad (Object origen.BorderStyle=BorderStyle. estilo.Font. En este ejemplo hemos importado el espacio de nombres System.Drawing.Dashed.BackColor=Color.

Value.gif”>imagen 1</asp:ListItem> .NET</title> </head> <script language=”C#” runat=”server”> void cambiaImagen (Object origen.AlternateText=lista. imagen.Resultado de ejecutar ejemplo8. EventArgs args) { imagen. } </script> <body> <form id=”formulario” runat=”server” method=”post”> <asp:Image id=”imagen” runat=”server” ImageUrl=” ” AlternateText=”” /> <asp:DropDownList AutoPostBack=”True” id=”lista” OnSelectedIndexChanged=”cambiaImagen” runat=”server” > <asp:ListItem value=”imagen1.ImageUrl=lista.SelectedItem.aspx en el navegador Ejemplo9.Text.80 - .aspx <%@ Page language =”c#” %> <html> <head> <title>Ejemplo de uso de controles Web en una página ASP.SelectedItem.

jpg”>imagen 2</asp:ListItem> <asp:ListItem value=”imagen3. la propiedad AutoPostBack del objeto DropDownList tiene el valor true.aspx en el navegador . Resultado de ejecutar ejemplo9.gif”>imagen 3</asp:ListItem> </ asp: DropDownList > </form> </body> </html> Este Web Form tiene un objeto de la clase DropDownList con nombres de ficheros de imagen.<asp:ListItem value=”imagen2. y un objeto de la clase Image que mostrará la imagen que seleccionemos en la lista desplegable (capturamos el evento OnSelectedIndexChanged para actualizar la imagen cada que seleccionemos un elemento de la lista).81 - . Este evento se produce cada vez que se modifica la selección de un elemento de la lista y además.

y nos permite acceder a sus propiedades. - Existen controles HTML.NET que necesitemos para recoger la información correspondiente. - .RECUERDE - Podemos representar a la página ASP.NET. Este objeto nos sirve como contenedor de todos los componentes que constituyen la página.NET actual como un objeto de la clase Page. controles Web. Los Web Forms ofrecen un modelo de programación más visual. integran el tratamiento de eventos del cliente con el código correspondiente en el servidor y llevan a cabo el mantenimiento del estado del formulario de forma automática entre peticiones.82 - . - - Existe un gran número de controles de servidor y cada uno de ellos pertenece a una clase del paquete. métodos y eventos. permiten una mayor separación entre la lógica de la aplicación y la presentación de la misma. Dentro del formulario Web colocaremos los distintos controles de servidor de ASP. el código resultante es más limpio. controles de lista y controles avanzados. - Los Web Forms sustituyen a los formularios HTML dentro del entorno de programación de ASP.NET Framework.

EL CONTROL DATAGRID ________________________________ 87 .2.1. DATA GRID) 6. EL CONTROL DATALIST_________________________________ 85 6.83 - .Tema 6 COMPONENTES (DATA LIST.

.

EL CONTROL DATALIST Este control permite mostrar un listado de datos. es decir. Por defecto toma el valor Vertical. para presentar un formato de distribución de tabla típico de HTML.NET</title> </head> . Estos controles están especializados en mostrar listados de datos en las páginas ASP. Por defecto el valor que toma es 1.85 - . RepeatDirection: esta propiedad indica la orientación que tomarán los datos contenidos en el DataList.SqlClient” %> <html> <head> <title>Ejemplo de uso del control Web DataList en una página ASP. Podemos personalizar su apariencia a través de las propiedades RepeatDirection. si se mostrarán de forma horizontal o vertical. o el valor Flow. Los valores que puede tomar son Vertical y Horizontal.aspx <%@ Page language =”c#” %> <%@ Import Namespace =”System. Puede tomar dos valores.1. Table.NET. 6. RepeatColumns: en esta propiedad indicaremos el número de columnas utilizado para mostrar los datos.Data” %> <%@ Import Namespace =”System. RepeatLayout y RepeatColumns.En este capítulo veremos una introducción a los controles Web de lista DataList y DataGrid. El valor por defecto es Table. Veamos un ejemplo de este control: datalist.Data. para que los datos se distribuyan de forma lineal. (se generará todo el código de filas y columnas de una tabla HTML). que permiten indicar de qué forma se mostrarán y distribuirán los datos: RepeatLayout: esta propiedad indica la distribución que tomarán los datos presentados.

DataItem)[“apellido”] %>&nbsp. hemos importado en el ejemplo los espacios de nombres System. Este ejemplo mostrará los datos en una tabla que muestra todos los bordes. listado. El valor Both en la propiedad GridLines indica que deben mostrarse las líneas de separación de la tabla.SqlClient. que proporcionan las clases del . con). “Clientes”). la etiqueta del control tiene el atributo runat con el valor server. con tres columnas en cada fila y con una distribución vertical de la información.<script language=”C#” runat=”server”> void Page_Load (Object origen. apellido from Clientes”.Tables[“Clientes”].DataSource = datos.Data y System. database=bdprueba.Data. comando.DataBind(). uid=user.DataItem)[“nombre”] %>&nbsp. Debido a que el control DataList está asociado a unos datos.NET para . SqlDataAdapter comando= new SqlDataAdapter (“Select nombre. <%# ((DataRowView)Container. } } </script> <body> <asp:DataList id=”listado” runat=”server” RepeatDirection=”Vertical” RepeatLayout=”Table” RepeatColumns=”3” GridLines=”Both” > <ItemTemplate> <%# ((DataRowView)Container.86 - .Fill(datos.DefaultView.IsPostBack) { SqlConnection con= new SqlConnection(“server=platon. listado. EventArgs args) { if (!Page. pwd=prueba ”). </ItemTemplate> </asp:DataList> </body> </html> Como el resto de controles Web que hemos visto. DataSet datos=new DataSet().

6.2. con id listado.87 - . se generará el código HTML necesario para formar la tabla que visualiza los datos. Veamos un ejemplo que ilustre su uso.Data” %> <%@ Import Namespace =”System. es decir. nos conectamos a una base de datos llamada bdprueba.aspx <%@ Page language =”c#” %> <%@ Import Namespace =”System.SqlClient” %> . datagrid. En este caso. Al ejecutar esta página obtendríamos en nuestro navegador una tabla HTML que contiene los datos obtenidos de la consulta a la tabla Clientes.Data. con el usuario user y contraseña prueba.conectarnos a una base de datos y enviar comandos. que está vinculado a nuestro control DataList. EL CONTROL DATAGRID Este control muestra la información en forma de tabla con celdas y columnas. El conjunto de resultados obtenidos de la consulta lo asociamos a un objeto DataSet.

comando.Tables[“Clientes”]. pwd=prueba ”).<html> <head> <title>Ejemplo de uso del control Web DataGrid en una página ASP. con).Fill(datos. tabla. } } </script> <body> <asp:DataGrid id=”tabla” runat=”server” GridLines=”Both” BorderWidth=”1” HeaderStyle-BackColor=”pink” HeaderStyle-Font-Bold=”True” > </asp:DataGrid> </body> </html> Como en el ejemplo anterior.88 - . EventArgs args) { if (!Page.DefaultView.DataBind(). database=bdprueba. Por su parte.IsPostBack) { SqlConnection con= new SqlConnection(“server=platon. apellido. DataSet datos=new DataSet(). “Clientes”). edad from Clientes”.NET</title> </head> <script language=”C#” runat=”server”> void Page_Load (Object origen. este control genera una columna por cada campo presente en el origen de datos. tabla. Por defecto. uid=user.DataSource = datos. nos conectamos a la base de datos y obtenemos un conjunto de resultados que vinculamos al control DataGrid. SqlDataAdapter comando= new SqlDataAdapter (“Select nombre. l/os valores de los campos se mostrarán en cada columna como etiquetas de texto y el nombre de los campos aparecerá en la primera fila de la tabla generada (como cabecera de los datos). .

border-width:1px"> <tr style="background-color:pink.NET.El código HTML que genera este ejemplo y que le llega al cliente que solicita la página ASP. es el siguiente: <html> <head> <title>Ejemplo de uso del control Web DataGrid en una página ASP.NET</title> </head> <body> <table cellspacing="0" rules="all" border="1" id="tabla" style="border-collapse:collapse.89 - . border-style:solid.font-weight=bold"> <td>Nombre</td><td>Apellido</td><td>Edad</td> </tr> <tr><td>Laura</td><td>Hermoso</td><td>25</td></tr> <tr><td>Susana</td><td>Ortiz</td><td>30</td>/tr> <tr><td>Nerea</td><td>Barranco</td><td>31</td></tr> <tr><td>Luis</td><td>Costa</td><td>23</td></tr> <tr><td>Sergio</td><td>Ruano</td><td>29</td></tr> <tr><td>Antonio</td><td>Aguilar</td><td>28</td></tr> </table> </body> </html> .

90 - . - Están vinculados a un conjunto de datos.NET. ASP.NET genera el código HTML necesario para representar los datos adecuadamente en forma tabular o lineal.RECUERDE - Los controles Web de lista DataList y DataGrid son controles especializados en mostrar listados de datos en las páginas ASP. - .

4. LA DIRECTIVA @ASSEMBLY _____________________________ 96 .1.2. LA DIRECTIVA @PAGE__________________________________ 93 7.3. LA DIRECTIVA @IMPLEMENTS ___________________________ 96 7. LA DIRECTIVA @IMPORT ________________________________ 95 7.Tema 7 DIRECTIVAS DE PÁGINAS 7.91 - .

.

A continuación vamos a ver las directivas disponibles en ASP. El sistema ASP. mediante estas directivas podremos declarar una serie de atributos de la página ASP. la directiva <%@ Language=”VBScript” %> de ASP. como el lenguaje en que está programada (recordemos que la plataforma .NET a <%@ Page Language=”VB” %>.NET: 7.NET y que informa al entorno de ejecución de ciertas características clave de dicha página. equivale en ASP. Esta sintaxis es parecida a los identificadores de código ASP. Esta directiva soporta los atributos existentes para la única directiva que se podía utilizar en versiones anteriores de ASP.Una directiva es un identificador que incluimos en una nuestra página ASP. Cada directiva comienza con el identificador “<%@” y termina con “%>”.. . Por ejemplo..1. Es decir.NET soporta varios lenguajes) o las librerías que se importarán.NET guarda compatibilidad con ASP 3.0. Podemos situar estas directivas en cualquier lugar de la página. Valor por defecto: false. Debemos poner este atributo a true para poder ejecutar DLL ActiveX desarrolladas para el sistema anterior de páginas ASP. se suelen situar al principio del código. Los valores principales que puede llevar esta directiva son los siguientes: AspCompat: Valores: true ó false. sólo que con un símbolo de arroba al final del identificador de apertura. Estos pares “atributo-valor” van separados por el carácter espacio y el valor va entrecomillado.93 - . seguida de una serie de pares “atributo-valor” que definen los datos relativos a cada una de las directivas. y la que mayor número de atributos tiene. En cada página únicamente puede existir una directiva Page. Estas directivas de página tienen el siguiente formato: <%@ directiva atributo=valor [atributo=valor . que tendrán repercusión a la hora de crearla.NET actual.] %> Lo primero que escribimos es el nombre de la directiva. pero por convención. LA DIRECTIVA @PAGE Esta directiva es la más utilizada de todas.

El valor “ReadOnly” indica que la página únicamente podrá leer variables de sesión. - ContentType: Contiene una cadena que describe el tipo MIME devuelto por la página. Esta propiedad permite activar o desactivar el mantenimiento automático de los valores de los controles Web dentro de un formulario. permite tener un bloque de código en un fichero separado de la página ASP. - Language: Valores: “vb”. Se utiliza para activar o desactivar el búfer de la página ASP. Este atributo contiene la página de error que se va a utilizar en el caso de que se produzca una excepción no tratada en la ejecución de la página. Este atributo indica si los eventos de la página (UnLoad. es decir. false o ReadOnly. si se permite o no la utilización de la propiedad Session de la clase Page. Valor por defecto: true. Init. .NET true ó false. es el lenguaje al que se compilará todo el código fuente de la página. - ErrorPage: Valores: URL de la página de error. - Inherits: Valores: nombre de clase. Load. etc) se van a lanzar de forma automática. Esta información se enviará como cabecera HTTP al navegador. “c#” e identificadores de lenguajes compatibles con Microsoft . Valor por defecto: true.NET). Este atributo informa al sistema si esta página tendrá acceso al sistema de gestión y mantenimiento de sesiones. Valor por defecto: “vb”. pero no modificarlas ni crear variables nuevas. - Src: Este atributo contiene el nombre de un fichero que contiene código que podrá ser utilizado en la página (es una forma de separación de código. Define el lenguaje en que está programada la página actual. este tipo será “text/html” o “text/plain”. Valor por defecto: true. - Buffer: Valores: true ó false. - EnableSessionState: Valores: true. - ClassName: Esta propiedad contiene un valor de cadena que indica el nombre de la clase de la página actual.- AutoEventWireup: Valores: true ó false.NET actual. Con esta propiedad informamos al compilador que la página actual hereda de la clase especificada.94 - . Habitualmente. Valor por defecto: true. - EnableViewState: Valores: true ó false.

deberemos utilizar una directiva Import por cada uno.NET Framework. por lo que si queremos importar más de un espacio de nombres. Cuanto mayor nivel especifiquemos.2. por lo que no tenemos que importarlas de forma explícita con la directiva Import. Este espacio de nombres puede ser propio de la plataforma . 7. Únicamente podemos indicar un espacio de nombres por directiva Import.Collections .NET es HTML (text/html) y que únicamente podremos leer las variables de sesión. Su sintaxis es: <%@ Import NameSpace=”valor” %> El sistema importa automáticamente una serie de espacios de nombres para las páginas ASP. Ejemplo de uso de esta directiva: <%@ Page Language=”C#” ContentType=”text/html” EnableSessionState=”ReadOnly” %> En este caso hemos indicado que el lenguaje utilizado en el código fuente de la página es C#. y tendremos acceso a todas sus clases. LA DIRECTIVA @IMPORT Esta directiva la usaremos para importar de forma explícita un espacio de nombres (NameSpace) determinado.- WarningLevel: Valores: de 0 a 4.95 - . Define el nivel de información que queremos utilizar al compilar nuestras páginas.NET. más estricto será el compilador a la hora de informar sobre potenciales fallos de sintaxis o funcionamiento de nuestro código fuente. que el tipo de contenido que va a devolver la página ASP. Éstos son: System System. Al importar un espacio de nombres determinado tendremos acceso a todas las clases definidas en él. o bien un espacio de nombres definido por nosotros.

Su sintaxis es: <%@ Implements Interface=”nombreInterfaz” %> 7.3.Web. no es necesario indicar dicha librería mediante la directiva Assembly. si deseamos implementar varios interfaces en la página.- System.Collections.Security System.Web.WebControls 7. LA DIRECTIVA @IMPLEMENTS Esta directiva nos permite implementar un interfaz determinado dentro de una página ASP.UI. LA DIRECTIVA @ASSEMBLY Esta directiva importa una librería DLL o Assembly dentro de nuestra aplicación.Web System.Text.HtmlControls System.4.Web.Specialized System.Text System. porque ya se encuentra disponible por encontrarse en este directorio especial.Configuration System.96 - . Al igual que ocurría con la directiva anterior. ya que cuando una librería DLL se encuentra en el directorio bin de la aplicación Web. propiedades y eventos.RegularExpressions System.Web. Implementar un interfaz significa dar contenido a sus métodos.Web.SessionState System.NET. . haciendo visibles todos sus espacios de nombres y clases a nuestro código. Normalmente.IO System. una por cada interfaz.UI System.Caching System. esta directiva no se utiliza.Web. debemos utilizar varias directivas Implements.UI.

97 - .Si deseamos hacer referencia a varias librerías DLL. Esta directiva cuenta con los siguientes atributos: Name: Especifica el nombre del assembly compilado (sin extensión). . Ejemplo de su uso: <%@ Assembly Name=”Librería” %> <%@ Assembly Src=”Librería.NET.NET podemos encontrar una referencia completa de todas las directivas en ASP. Src: Especifica la ruta del fichero de código fuente que define el assembly. El sistema compilará de forma dinámica el código fuente en vez de encontrarse con el Assembly ya compilado.cs” %> En la documentación técnica de Visual Studio . en este caso sí debemos indicar la extensión correspondiente. debemos utilizar una directiva por cada una.

RECUERDE

-

Hemos visto las directivas @Page, @Import, @Implements y @Assembly. Las directivas son identificadores que suelen añadirse al principio de cada página ASP.NET y que informan al sistema de ciertas características clave de dicha página.

-

-

Cada directiva puede contener uno o más pares “atributo-valor”. Nos permiten especificar datos como el lenguaje en que está programada la página, tipo de acceso a las variables de sesión, tipo de contenido devuelto por la página, importación de los espacios de nombres necesarios, etc.

-

- 98 -

Tema 8

CONFIGURACIÓN DE
IIS

8.1. HERRAMIENTA DE ADMINISTRACIÓN DE SERVICIOS DE INTERNET 103 8.2. CONFIGURACIÓN DE IIS___________________________________ 104 8.2.1. Ficha Sitio Web ____________________________________ 105 8.2.2. Ficha Directorio particular ___________________________ 105 8.2.3. Ficha Documentos _________________________________ 106 8.2.4. Ficha Rendimiento _________________________________ 107 8.3. LA APLICACIÓN WEB _____________________________________ 108

- 99 -

Internet Information Server(IIS) es un servidor Web que permite publicar información en una intranet o en Internet. Este servidor Web se apoya sobre el protocolo de transferencia de hipertexto (HTTP), para transmitir la información y comunicarse con los clientes. Es el servidor Web sobre el que se ejecutan las páginas ASP.NET. Desde su versión 3 incluye las versiones anteriores de ASP. Al instalar IIS 5.0 se instala por defecto ASP 3.0. ASP.NET es compatible con ASP, es decir, podemos tener aplicaciones Web basadas en ASP y ASP.NET funcionando en el mismo servidor Web Internet Information Server 5.0. Las páginas ASP tienen la extensión .asp y son procesadas por la DLL ASP.DLL, mientras que las páginas ASP.NET poseen la extensión .aspx y son procesadas con el entorno de ejecución .NET Framework. El servidor Web atiende las peticiones de páginas de los clientes, identifica de qué tipo de página se trata, las procesa y les envía el resultado a los navegadores. Internet Information Server 5.0 es un servidor Web para plataformas Windows 2000 (está totalmente integrado con el sistema operativo, forma parte de la instalación de Windows 2000 y permite disponer de un servidor Web tanto en el entorno de una Intranet como en el entorno de Internet). Podemos acceder a su administración a través del Administrador de servicios de Internet, es un entorno escalable basado en los componentes cliente/servidor que se pueden integrar dentro de las aplicaciones Web. Podemos saber si tenemos instalado IIS 5.0 en nuestra máquina escribiendo la siguiente URL: http://localhost en el navegador Web. Si aparece una ventana similar a la que presentamos a continuación, significa que lo tenemos instalado.

- 101 -

También podemos comprobarlo viendo si tenemos el Administrador de servicios de Internet dentro del grupo de programas Herramientas administrativas en el menú Inicio de Windows. Por defecto, la ruta del directorio de publicación en Internet es c:\Inetpub\wwwroot.

- 102 -

8.1. Consola del Administrador de Servicios de Internet En el panel de alcance aparecen los servidores que podremos administrar. El panel de la izquierda es denomina panel de alcance y el de la derecha. Podemos acceder a las propiedades de cualquiera de estos nodos a través del menú desplegable que aparece pulsando el botón derecho del ratón. El asterisco (*) señala el servidor local (IIS también permite realizar la administración remota de otros servidores IIS 5.0) Cada uno de los nodos del árbol que aparece en el panel de alcance son instancias de servicios individuales. y a su vez. se representan mediante un icono de un ordenador acompañado del nombre del servidor. . Su uso es bastante intuitivo. Esta consola se divide en dos paneles. El panel de resultados visualiza los contenidos referentes al nodo seleccionado en el panel de alcance. panel de resultados.103 - . éstos pueden contener un conjunto de objetos administrables.0. HERRAMIENTA DE ADMINISTRACIÓN DE SERVICIOS DE INTERNET A través de la consola del Administrador de Servicios de Internet podemos administrar y configurar en un mismo entorno todos los servicios del servidor IIS 5.

pulsando el botón derecho del ratón sobre el elemento a configurar.8.NET. Hoja de propiedades de un sitio Web . a las que accedemos como hemos visto. y seleccionando la opción Propiedades que aparece en este menú contextual.104 - . Cada hoja de propiedades mostrará una serie de parámetros para configurar.2. dependiendo del elemento seleccionado (directorio. CONFIGURACIÓN DE IIS A lo largo de los siguientes apartados veremos las opciones de configuración necesarias y más relacionadas con la ejecución de páginas ASP. sitio Web o fichero). La configuración de IIS se basa en la utilización de hojas de propiedades.

Por defecto.Para publicar documentos en el sitio Web. 8.105 - . c:\Inetpub\wwwroot. y el tipo de acceso que va a tener el usuario: Acceso al código fuente de secuencias de comandos. pero lo podemos cambiar a través de su hoja de propiedades. Lectura.2. Sólo secuencias de comandos: para permitir la ejecución de las páginas ASP y ASP.NET. También podemos indicar el tiempo de espera máximo (time-out) utilizado para establecer una conexión. indicar si deben registrarse las visitas.2.1. Otro de los valores configurables es el número de conexiones de clientes que aceptamos a nuestro sitio Web (podemos indicar un número. Además. cada sitio Web debe tener asignada una dirección IP y un número de puerto (para poder identificarlo). La opción Permisos de ejecución es relativa a la ejecución de aplicaciones ASP/ASP. o elegir la opción Ilimitado). y significa: Ninguno: no permite la ejecución de programas ni secuencias de comandos en el directorio. Podemos acceder y cambiar todos estos valores desde la hoja de propiedades del sitio Web. Esto asegura que se cerrarán todas las conexiones si el protocolo HTTP no puede establecer una conexión desde el cliente en el tiempo especificado (por defecto son 900 segundos). podemos modificar el directorio de publicación del sitio Web. a cualquier otro directorio del disco duro). Escritura. debemos copiar los ficheros correspondientes al directorio de publicación del sitio Web (que por defecto es. Ficha Directorio particular En la ficha Directorio particular de la hoja de propiedades. 8.NET. Otra de las opciones configurables es la activación o no del registro de los accesos al sitio Web y el formato de archivo en el que se almacena esta información.2. Examinar directorios. el servicio Web se encuentra en el puerto 80. Ficha Sitio Web Es necesario que cada sitio Web tenga un directorio de publicación. .

Ficha Directorio particular de la hoja de propiedades de un sitio Web 8. Comandos y ejecutables: permite ejecutar cualquier aplicación en el directorio.3.NET.106 - . El orden en el que indiquemos estos documentos es significativo. Ficha Documentos En esta ficha de la hoja de propiedades.- Sec. podemos indicar la página por defecto del sitio Web (es la página que se presentará cuando no especifiquemos ningún fichero en concreto de nuestro sitio). ya que el servidor Web devolverá el primero que encuentre de ellos. una página ASP o una página ASP. Este documento predeterminado puede ser una página HTML. .2.

4.000 Más de 100. Ficha Rendimiento En esta hoja podemos configurar el ajuste del rendimiento de nuestro servidor atendiendo al número de accesos que se espera por día: Menos de 10.2.Ficha Documentos de la hoja de propiedades de un sitio Web 8.107 - .000 También podemos limitar el ancho de banda a los KB/s que estimemos apropiados y asignar un límite de proceso de uso de la CPU (expresado en tanto por ciento). .000 Menos de 100.

0 deberemos indicar el punto de arranque de la aplicación y hasta dónde se extiende. Lo veremos más detalladamente en el capítulo dedicado al archivo Global.3. Podemos distinguir los directorios de arranque de una aplicación Web porque el Administrador de servicios de Internet los muestra con un icono especial. uno de aplicación (información accesible y compartida por todos los clientes) y otro de sesión (información por cada usuario de la aplicación). LA APLICACIÓN WEB Una aplicación Web es un conjunto de ficheros que se ejecutan dentro de un conjunto definido de directorios del sitio Web. Desde la consola de administración de IIS 5.asax.Ficha Rendimiento de la hoja de propiedades de un sitio Web 8. con una pequeña bola con un aspa metida en una caja.NET podemos distinguir dos tipos de contextos o estados. En cada aplicación ASP. .108 - .

.NET ofrece un sistema de configuración de aplicaciones basado en ficheros XML.config. De forma automática se creará la aplicación y aparecerán dos nuevos botones Quitar y Configurar. Veremos este fichero en el próximo capítulo. cada aplicación poseerá un fichero de configuración denominado Web. crear la aplicación ASP. de modo que. y por tanto. El botón Quitar se utiliza para eliminar la aplicación creada.NET. pulsar el botón Crear (dentro del apartado Configuración de la aplicación). debemos seleccionar en el Administrador de servicios de Intenet el directorio raíz o inicial que contiene sus páginas. ASP. y en la ficha Directorio de su hoja de propiedades. y el segundo botón para configurarla.109 - .Para crear el punto de inicio de una aplicación Web.

110 - .0 forma parte de la instalación de Windows 2000). - Cada aplicación ASP.0. etc. el número de conexiones de clientes que aceptamos. establecer límites sobre el ancho de banda utilizado para el sitio Web.NET se ejecutan sobre el servidor Web Internet Information Server 5. la página por defecto.NET para crearla. - ASP. - A través de la consola del Administrador de Servicios de Internet podemos administrar y configurar en un mismo entorno todos los servicios del servidor IIS 5. - Debemos indicar el punto de inicio de una aplicación ASP. El servidor Web atiende las peticiones de páginas de los clientes. - A través de la hoja de propiedades del sitio Web podemos configurar el directorio de publicación de nuestras páginas. Esto lo podemos hacer a través de la hoja de propiedades del directorio inicial de la aplicación en la consola del Administrador de Servicios de Internet.RECUERDE - Las páginas ASP.NET posee un fichero de configuración denominado Web.0. identifica de qué tipo de página se trata. (IIS 5.NET es compatible con ASP. el tiempo de espera máximo (time-out) utilizado para establecer una conexión. permisos de ejecución. .config. las procesa y les envía el resultado a los navegadores.

1.111 - .ASAX EL ARCHIVO 9. GESTIÓN DEL ESTADO DE LA APLICACIÓN ASP. EVENTOS DE SERVIDOR _______________________________ 113 9.2.Tema 9 GLOBAL.NET ________ 115 .

.

En él se sigue un formato similar al de la páginas ASP. Este fichero se utilizaba para insertar en él el código a ejecutar en los eventos de inicio y finalización de las distintas sesiones de usuario y de la aplicación. y se ejecutaba al iniciarse nuestra aplicación Web. y tiene lugar cuando el primer usuario carga una página ASP.NET correspondiente. En el nuevo sistema ASP. Dentro de este evento colocaremos el código de limpieza de la aplicación (como liberar los recursos utilizados) o que deba ejecutarse al finalizar nuestra aplicación.1. disponíamos de la opción de utilizar el fichero GLOBAL.NET: <script language=”C#” runat=”server”> [Mëtodos para el tratamiento de eventos.ASAX: Application_OnStart: este evento se lanza cuando se inicia la ejecución de la aplicación ASP.En la versión anterior del sistema de páginas activas ASP.ASAX (porque ello fuerza una compilación del fichero). cuando se apaga el servidor Web o si se modifica el código fuente del fichero GLOBAL. Se lanza cuando finaliza la ejecución de la aplicación ASP. EVENTOS DE SERVIDOR Veamos los principales eventos que podemos tratar en el fichero GLOBAL. Este fichero estaba situado en el directorio raíz de nuestro servidor Web o de nuestro directorio virtual.NET disponemos de un mecanismo similar. Application_OnEnd: es el evento contrario al anterior.ASAX.113 - . Dentro de este evento indicaremos el código de inicialización de la aplicación. .NET. representado por el fichero GLOBAL. inicialización de objetos con ámbito de Sesión y Aplicación] </script> 9.ASA. Esta finalización de la ejecución puede ocurrir por varios motivos: cuando finaliza la última de las sesiones de un usuario con la aplicación.NET perteneciente a la aplicación.

Application_OnDisposed y Application_OnEnd se lanzan una única vez durante toda la vida de la aplicación ASP. y se producirá antes del evento Application_OnEnd. El esquema siguiente muestra el orden en que se producen los eventos que hemos visto. como el código para inicializar las variables para toda la sesión (la identificación del usuario o sus preferencias por ejemplo) para que estos valores estén disponibles para ese usuario mientras su sesión permanezca activa. - Application_OnDisposed: este evento es lanzado cuando la aplicación ASP.SessionState. Se lanza cuando finaliza una sesión de usuario.HttpSessionState (clase que representa la sesión de un usuario en la aplicación ASP. - Session_OnEnd: es el evento contrario al evento Session_OnStart.Web. porque se ha forzado mediante una llamada al método Abandon() de la clase System. Dentro de este evento colocaremos el código que debe ejecutarse antes de que se cargue la primera página de la aplicación. Si finaliza la ejecución de la aplicación se ejecutarán todos los eventos Session_OnEnd de cada sesión de usuario antes de lanzarse el evento Application_OnEnd. mientras que los eventos Session_OnStart y Session_OnEnd se ejecutarán repetidas veces durante la vida de la aplicación.- Session_OnStart: este evento se lanza cuando se inicia una nueva sesión dentro de una aplicación ASP.114 - . Este hecho puede producirse porque haya caducado la sesión al permanecer inactiva el tiempo indicado en su propiedad Timeout. El inicio de sesión se produce para cada usuario cuando solicita la primera página de la aplicación.NET. dependiendo de las sesiones que hayan iniciado los usuarios con la aplicación ASP. y también la circunstancia que provoca el lanzamiento de cada evento: .NET). Para que se produzca este evento.NET. se debe haber lanzado previamente el evento Application_OnStart. o bien.NET inicia su descarga de memoria.NET. Los eventos Application_OnStart.

cada usuario tendrá sus variables y sus valores.NET La gestión del estado de la aplicación ASP. y también en la clase HttpApplication (clase que representa a una aplicación ASP. a través de las propiedades Application y Session: El objeto Session: este objeto nos permite almacenar el estado de cada usuario que ha iniciado una sesión con la aplicación. es decir.NET consiste en la permanencia de objetos o valores a lo largo de la vida de la aplicación y a lo largo de cada sesión de usuario en la aplicación.NET).2.NET. GESTIÓN DEL ESTADO DE LA APLICACIÓN ASP.NET nos permite almacenar información entre diversas solicitudes de páginas dentro de una aplicación a través de los objetos Session y Application (estos objetos ya se encontraban disponibles en la versión anterior de ASP).NET.115 - . Esta información se mantendrá a lo largo de toda la vida de cada sesión particular para cada usuario. ASP. Estos objetos integrados en encuentran en las dos propiedades del mismo nombre del objeto Page (que representa a una página ASP. lo vimos en el capítulo 5). No se puede mantener el estado entre diferentes páginas Web a través del protocolo HTTP (protocolo sobre el que se apoya el sistema ASP. Este objeto es una instancia de la clase .ASAX Application_OnDisposed Application_OnEnd 9. ya que es un protocolo sin estado).El primer usuario se conecta y solicita una página de la aplicación Application_OnStart Un usuario inicia una sesión con la aplicación Session_OnStart La sesión caduca Se llama al método Abandon() de Session Session_OnEnd Termina la última sesión con la aplicación Finaliza el servidor Web Se modifica el fichero GLOBAL.

El almacenamiento de los objetos se basa en una estructura en forma de pares clave/valor. El objeto Application: este objeto nos permite almacenar la información que es común para toda la aplicación.HttpApplicationState.Web. objeto=Session[“CadenaClave”]. como en el objeto Session. En contraposición al objeto Session. cuyas variables son particulares para cada uno de los usuarios conectados. es: Session[“CadenaClave”]=objeto. la sintaxis para almacenar objetos en el estado de la aplicación y recuperarlos es: Application[“CadenaClave”]=objeto. Este objeto es una instancia de de la clase System.SessionState. objeto=Application[“CadenaClave”].NET en cualquiera de sus páginas. .116 - . La sintaxis para almacenar un objeto en el objeto Session y recuperarlo. no se comparten y son propias de la sesión de cada uno.Web. Las variables almacenadas dentro de este objetos son accesibles a todos los usuarios que están utilizando la misma aplicación ASP. Así.HttpSessionState.System.

RECUERDE - En ASP.ASAX. - Presenta un formato similar al de las páginas ASP.ASA de ASP. Session_OnEnd y Application_OnDisposed y el código de inicialización de objetos con ámbito de Sesión y Aplicación. Se encuentra situado en el directorio raíz de nuestro Servidor Web o de nuestro directorio virtual. - .117 - . de propósito similar al GLOBAL.NET disponemos del fichero GLOBAL. Session_OnStart. Application_OnEnd.NET En él incluiremos el código para el tratamiento de los eventos Application_OnStart. y se ejecuta al iniciarse nuestra aplicación Web.

.

3.CONFIG EL ARCHIVO 10.2. CONFIGURACIÓN DE LA PÁGINA _______________________ 124 10.4. CONFIGURACIÓN DE LA SESIÓN________________________ 125 . CONFIGURACIÓN GENERAL ___________________________ 123 10. FORMATO DE LOS FICHEROS DE CONFIGURACIÓN ________ 122 10.Tema 10 WEB.1.119 - .

.

NET se encuentra en el fichero web.NET\ Framework\[version] \config.121 - . La configuración de las aplicaciones ASP. Este nuevo sistema presenta las siguientes ventajas: Valores de configuración en formato reconocible. Podemos abrir el fichero XML y leer y modificar los valores de configuración que contiene. Puede haber otros ficheros web. Portabilidad de las configuraciones. se encuentra en el directorio [WinNT]\Microsoft. es decir. Este fichero representa la configuración por defecto de todas las aplicaciones ASP. en otros directorios más anidados. Existen dos tipos de ficheros de configuración: Configuración del servidor.config. Este sistema de configuración de las aplicaciones Web basado en el servidor Web IIS ya no es válido para las aplicaciones ASP. Esta configuración se almacena en un fichero denominado machine. Actualizaciones inmediatas. únicamente es necesario copiar los ficheros XML de configuración a la aplicación correspondiente.NET existentes en el servidor. Es posible bloquear los valores de configuración que no deban ser sobrescritos. la configuración de las aplicaciones Web se realizaba a través del Administrador de servicios de Internet.config de su directorio raíz. Para tener una aplicación ASP. se utilizan ficheros XML de configuración.config dentro de una misma aplicación. Configuración de la aplicación. Bloqueo de valores de configuración. La configuración del fichero web.NET. Los cambios en los ficheros de configuración se toman de forma inmediata y automática en el sistema sin necesidad de reiniciar el Servidor Web o para los servicios.config sobrescribe los valores especificados en el . La infomación de configuración relativa y específica a una aplicación ASP.NET en un servidor con la misma configuración que otra aplicación distinta. y la información relativa a la configuración de las aplicaciones ASP se almacenaba en el repositorio binario denominado metabase del Internet Information Server.NET se basa en ficheros XML.En las versiones anteriores de ASP.

122 - . el elemento raíz es siempre la etiqueta <configuration>.config de directorios superiores (a no ser que dichos valores se hayan bloqueado para evitar ser sobrescritos). Los valores de los atributos de las etiquetas comienzan siempre por mayúscula y las primeras letras de cada una de las siguientes palabras que la formen van también en mayúscula. Dentro de este elemento.NET distingue entre mayúsuculas y minúsculas. cada fichero web. y siguen el siguiente criterio: Los nombres de etiquetas y atributos comienzan con letra minúscula y las primeras letras de cada una de las siguientes palabras que forman el nombre van en mayúscula.config. 10. Existe una excepción. machine.config y web.1. Cada fichero de configuración contiene una jerarquía anidada de etiquetas y subetiquetas XML con atributos que especifican los valores de configuración.config. se diferencian únicamente en el nombre (además de su localización como hemos visto).fichero machine.config sobrescribirá los valores de configuración utilizados en los ficheros web. FORMATO DE LOS FICHEROS DE CONFIGURACIÓN Los dos ficheros de configuración para una aplicación ASP. y a su vez. los valores true y false se escriben con todas las letras en minúsculas.NET: <configuration> <!—Configuración para aplicar a la aplicación ASP. Dentro de los ficheros de configuración.NET. Las etiquetas deben encontrarse bien construidas. aparecerán las distintas secciones de configuración para aplicar a la aplicación ASP.NET --> </configuration> . entre sus etiquetas de comienzo y fin. ya que internamente presentan el mismo formato XML. Debemos tener en cuenta que el sistema de configuración de ASP.

En los próximos capítulos 11 (Módulos y manejadores HTTP) y 12 (Seguridad en ASP.NET del servidor.NET. Los atributos que contiene esta etiqueta son: executionTimeout: en este atributo indicaremos el tiempo de espera en segundos que se aplicará a la ejecución de un recurso solicitado. por lo se enviará una ruta relativa. Se expresa en KB.NET finalizará la ejecución del recurso.web> <httpRuntime executionTimeout=”90” maxRequestLength=”4096” useFullyQualifiedRedirectUrl=”false” .123 - . ya que estos temas dependen de la configuración de otras de sus secciones. En ella podemos indicar una serie de parámetros de configuración genéricos para la aplicación ASP. maxRequestLength: este atributo indica el tamaño máximo de una petición. si no son sobrescritos en algún fichero web.A continuación veremos las secciones principales y más comunes en la configuración de una aplicación ASP.2. CONFIGURACIÓN GENERAL Esta sección se encuentra en la etiqueta <httpRuntime>. Si se supera este tiempo de espera.config de la aplicación correspondiente): <configuration> <system. userFullyAQualifiedRedirectUrl: indica cómo se le va a devolver una URL al cliente. El código siguiente muestra los valores que presenta por defecto esta sección en el fichero machine. por defecto tiene el valor false. El valor por defecto que presenta este atributo es de 90 segundos.NET. Puede tomar los valores true o false.config (y que serán aplicables a todas las aplicaciones ASP. 10. la aplicación ASP. completa o relativa. y por defecto presenta el valor de 4096 KB.NET) seguiremos tratando estos ficheros.

por lo que estos eventos de la clase Page (que representa una página ASP. Init.NET de la aplicación actual. Por defecto tiene el valor true. Puede tomar los valores true o false.web> </configuration> 10. Por defecto tiene el valor true.NET). etc. UnLoad. Veamos sus principales atributos: autoEventWireup: este atributo indica si los eventos de la página (Load.3. buffer: este atributo se utiliza para activar o desactivar el búfer de las páginas ASP. false o readOnly (con este valor. por lo que los controles Web mantienen su estado entre distintas recargas del formulario Web. Puede tomar los valores true./> </system. .124 - . donde podemos controlar algunos de los comportamientos de las páginas ASP. a través del objeto Sessión que vimos (permite almacenar información común a la sesión actual del usuario en la aplicación Web).NET. por defecto tiene el valor true. enableSessionState: este atributo permite activar o desactivar el estado de sesión.NET en concreto. usando en ella esta directiva. Por defecto tiene el valor true. los vimos en el capítulo 5) se van a lanzar de forma automática. CONFIGURACIÓN DE LA PÁGINA Aquí veremos la etiqueta <pages>. Puede tomar los valores true o false. por lo que podemos sobrescribir estos valores de configuración de la aplicación para una página ASP.NET ejecuta por completo las páginas antes de enviar algo del resultado al usuario (el contenido del búfer no es enviado al navegador hasta que no se haya terminado de ejecutar la página). Estos atributos se corresponden con los atributos del mismo nombre de la directiva @Page (descrita en el capítulo 7). las páginas podrán leer variables de sesión pero no modificarlas ni crear nuevas variables). se lanzarán automáticamente. con lo que ASP. enableViewState: con este atributo podemos activar o desactivar el mantenimiento automático de los valores de los controles Web dentro de los formularios Web (este tema lo tratamos en el capítulo 5).

Puede tomar los valores true o false.web> </configuration> Si en el fichero web.4. Por defecto tiene el valor false. Esta inactividad significa que si el usuario no actualiza o solicita una página . CONFIGURACIÓN DE LA SESIÓN Podemos configurar el estado de sesión mediante la etiqueta <sessionState>.web> <pages buffer=”true” enableSessionState=”true” autoEventWireup=”true” enableSessionState=”true” /> </system.125 - . sólo tenemos que incluir la etiqueta <pages> con el atributo a sobrescribir: <configuration> <system.NET se apoyará en las cookies para manterner la sesión.config de una aplicación concreta deseamos sobrescribir alguno de los valores anteriores. Cuando tiene el valor true. por lo que ASP. por ejemplo.web> <pages buffer=”false” /> </system. la sesión se mantiene a través del mecanismo de URLs (el identificador de la sesión se añade a la ruta de las páginas ASP. Timeout: este atributo indica el intervalo de tiempo en minutos de inactividad para el objeto Session.web> </configuration> 10. Sus atributos más comunes son: cookieless: este atributo indica si el objeto Session utilizará el mecanismo de cookies para almacenar el identificador de sesión. el uso del buffer.NET solicitadas).Un ejemplo de uso de la etiqueta <pages> en un fichero de configuración podría ser: <configuration> <system.

126 - . Por defecto presenta el valor de 20 minutos. También podemos modificar este valor en la aplicación a través de la propiedad Timeout del objeto Session.durante ese tiempo. la sesión termina.web> </configuration> . tendríamos la siguiente configuración: <configuration> <system. Por ejemplo.web> <sessionState cookieless=”true” timeout=”30” /> </system. para aumentar el timeout de la sesión hasta 30 minutos y evitar el uso de cookies para mantener la sesión.

- Podemos configurar el tiempo de ejecución de un recurso.NET se basa en los ficheros XML machine. etc. Se distingue entre mayúsculas y minúsculas. el mantenimiento automático del estado de los controles Web.RECUERDE - La configuración de las aplicaciones ASP.config y web. - Los cambios en los ficheros de configuración se toman de forma inmediata y automática en el sistema sin necesidad de reiniciar el Servidor Web o para los servicios. . - Estos ficheros de configuración contienen una jerarquía anidada de etiquetas y subetiquetas XML con atributos que especifican los valores de configuración.config.127 - . el uso de cookies para mantener la sesión. el timeout de la sesión. activar el uso del buffer.

.

Tema 11 MANEJADORES http MÓDULOS Y 11.1.129 - . EJEMPLO DE MANEJADOR http___________________________ 132 .

.

que tomarán todas las aplicaciones del servidor Web. En el fichero machine.ascx) y ficheros de configuración (extensión . como puede ser la extensión de las páginas .aspx). Esto es posible porque ASP.config.131 - . Estos valores pueden ser Get.NET. Los más comunes que podemos encontrar son los manejadores para páginas ASP.config se indican una serie de manejadores HTTP. a no ser que se sobrescriban en algún web. que es denominada entorno de ejecución HTTP.config de la aplicación. Head.NET. los básicos para ASP. type: este atributo contiene el nombre de la clase que implementa el manejador HTTP. Esta etiqueta tiene los siguientes atributos: verb: este atributo contiene el tipo de verbo HTTP correspondiente al manejador que va a procesar la petición. Esta sección se encuentra en la etiqueta <httpModules> de los ficheros de configuración web.config). para controles de usuario (extensión . Post. o bien ser dirigida al manejador HTTP correspondiente. que generalmente se utiliza seguido de la extensión de los ficheros a tratar. Para indicar estos manejadores. son quienes determinarán si una solicitud determinada debería ser servida al cliente desde la caché.config o machine.aspx. etc y también el carácter asterisco (*) para indicar que el manejador tratará todos los verbos o acciones del protocolo HTTP. Dentro de esta sección podemos añadir manejadores personalizados o bien eliminar manejadores existentes.NET.NET (extensión . También acepta el carácter especial de asterisco. Los manejadores HTTP son los encargados de servir las peticiones de una extensión particular dentro de ASP. usaremos la subetiqueta <add> de la etiqueta <httpHandlers>.NET se basa en una arquitectura ampliable. path: en este atributo indicamos la ruta del recurso que se debe tratar. Se encuentran en la sección <httpHandlers> de los ficheros de configuración XML. .Los módulos HTTP son los responsables de filtrar cada solicitud/respuesta en una aplicación ASP. por ejemplo.

Request.Response. } } } } . y que simplemente devuelve el valor true. using System.Write(“</h2></body></html>”). respuesta.Web.Pruebas { public class miManejador:IHttpHandler { public void ProcessRequest (HttpContext entorno) { HttpRequest solicitud=entorno. de sólo lectura. respuesta. respuesta.11. Esta clase. using System. Este interfaz contiene el método ProcessRequest(). que realizará las funciones de un manejador HTTP. También es necesario implementar la propiedad IsReusable. que presentará una cadena de texto con un saludo y el parámetro que se ha pasado a la página (recuperaremos este valor mediante la colección QueryString del objeto Request asociado al contexto de la página asociada al manejador). namespace Componentes. En el ejemplo que vamos a ver.Write (“Saludos ” + solicitud.132 - . el método ProcessRequest() generará código HTML sencillo. EJEMPLO DE MANEJADOR HTTP Podemos añadir nuestros propios manejadores incluyendo una nueva etiqueta <add> en la sección de los manejadores HTTP. que haga referencia a la clase que implementa nuestro manejador. que será el método responsable de procesar la solicitud que se ha asociado con el manejador.QueryString[“nombre”] ).Web.IHttpHandler. debe implementar el interfaz System.Write(“<html><body><h2>”).1. } public bool IsReusable { get { return true. HttpResponse respuesta=entorno.

sería la clase del manejador (miManejador) la que atendería la solicitud. y el assembly es Componente.aspx” type=”Componentes. . Componente” /> </httpHandlers> </system. Si solicitamos la página pruebaManejador. donde se encuentran las DLL disponibles en esa aplicación. debemos copiar el assembly (librería) al directorio BIN de la aplicación.miManejador. por ejemplo. que se encuentra en el espacio de nombres Componentes.config sería: <configuration> <system.web> </configuration> En este ejemplo. la clase del manejador es miManejador.aspx. y mostraría una página con el mensaje “Saludos Luis”.Una vez compilada la clase y generado el assembly correspondiente.dll.133 - .web> <httpHandlers> <add verb=”*” path=”pruebaManejador.Pruebas. El código que aparecería en el fichero web.Pruebas.

. que haga referencia a la clase que implementa nuestro manejador. Se indican en la etiqueta <httpModules> de los ficheros de configuración XML.Web.aspx. - La clase del manejador HTTP debe implementar la propiedad IsReusable y el método ProcessRequest() del interfaz System. - Podemos añadir nuestros propios manejadores incluyendo una nueva etiqueta <add> en la sección de los manejadores HTTP. Se encuentran en la sección <httpHandlers> de los ficheros de configuración XML.NET.134 - .IHttpHandler. - Los manejadores HTTP son los encargados de servir las peticiones de una extensión particular dentro de ASP.RECUERDE - Los módulos HTTP son los responsables de filtrar cada solicitud/respuesta en una aplicación ASP. como puede ser la extensión de las páginas .NET.

BLOQUEAR VALORES DE CONFIGURACIÓN ______________ 137 12.135 - .Tema 12 SEGURIDAD EN ASP.NET 12.4. AUTENTIFICACIÓN BASADA EN FORMULARIOS ___________ 138 12. AUTENTIFICACIÓN Y AUTORIZACIÓN ____________________ 137 12.1. AUTORIZACIÓN DE USUARIOS _________________________ 140 .3.2.

.

usuarios autenticados en la aplicación. Para ello. Una vez autenticado. y que de esta forma pueda ver el código de inicialización o la configuración de nuestra aplicación. de los manejadores HTTP responsables de tratar cada petición. debe determinarse si esa identidad puede tener acceso a un recurso específico. presentando su nombre de usuario y contraseña. Si intentamos sobrescribir el valor de configuración. opciones de compilación. debemos incluir el atributo allowOverride=”false” en la etiqueta correspondiente para indicar que no se permita la sobrescritura de los valores de configuración. se le mostrará un mensaje de acceso denegado.NET proporciona dos tipos de servicios de autorización: Comprobaciones de permisos sobre un recurso para determinar si la cuenta de usuario autenticada puede obtener acceso a los recursos. Por lo general. La autenticación es el acto de determinar la identidad del usuario solicitante.2. BLOQUEAR VALORES DE CONFIGURACIÓN Es posible bloquear valores en el fichero machine.ASP. AUTENTICACIÓN Y AUTORIZACIÓN Es importante tener la capacidad de identificar usuarios y controlar el acceso a los recursos en nuestras aplicaciones Web. se producirá una excepción.1. 12. el usuario deberá identificarse.NET configura de manera automática el servidor Web IIS para que no sea posible que un cliente realice una petición directa a un fichero global. política de seguridad seguida.config para que no exista la posibilidad de que sean sobrescritos en los ficheros web. normalmente. Esto puede resultar muy peligroso porque podemos dejar ver la estructura de directorios que tenemos.config.asax. Así.config de las aplicaciones ASP.NET particulares.asax o web. ASP. etc.config o http://localhost/aplicacionWeb/global. Este proceso se conoce como autorización. 12. si un usuario indica en la ruta de su navegador algo parecido a http://localhost/aplicacionWeb/ web. Estos permisos se configuran para un . dar idea de la ubicación de archivos confidenciales.137 - . para ser autenticado.

138 - .web> <authentication mode="Forms"/> <authorization> <deny users="?" /> </authorization> </system.NET: 12. la dirección URL para la página de inicio de sesión. el tipo de protección.config debería presentar una configuración como ésta: <configuration> <system. el tiempo de validez de la cookie y la ruta de acceso que se debe utilizar para la cookie suministrada.NET permite autenticar usuarios y desviar a los usuarios no autenticados hacia una página de inicio de sesión. A continuación. <authentication mode="Forms"> . AUTENTICACIÓN BASADA EN FORMULARIOS La autenticación basada en formularios es un servicio de autenticación de ASP.NET que permite a las aplicaciones suministrar su propia interfaz de inicio de sesión y hacer su propia verificación de identidad del usuario. Para ello. debemos configurar la etiqueta <authentication> con la opción Forms y denegar el acceso a los usuarios anónimos. ASP.3. Autorización de URL.web> </configuration> Podemos configurar el nombre de la cookie a usar.determinado archivo o directorio mediante la ficha Seguridad de la página de propiedades del Explorador. nuestro web. vamos a ver la autenticación basada en formularios que proporciona ASP. que autoriza a una identidad el acceso a partes del espacio Web. Estos datos se indican en los distintos atributos de la etiqueta <forms>. Para que una aplicación pueda utilizar autenticación basada en formularios. además de realizar todas las tareas de administración de cookies sobre las que se apoya el mecanismo de autenticación. que es un subelemento de la etiqueta <authentication mode="Forms">.

COOKIE_AUT" loginUrl="paginaLogin. - name: este atributo indica el nombre de la cookie que se va a utilizar para el mecanismo de autenticación. de permanencia de la cookie.aspx).aspx" protection="all" timeout="30" path="/"> </forms> </authentication> Los atributos de la etiqueta <forms> son: - loginUrl: URL de la página de inicio de sesión a la que se desvían los usuarios para autentificarse. la cookie caduca. Dentro de <credentials>. que es una subetiqueta de la etiqueta <authentication>. <authentication> <credentials passwordFormat="SHA1" > <user name="usuario1" password="BADE125DS2855DS22DSE" /> . - Las solicitudes no autenticadas se desvían a la página de inicio de sesión indicada (paginaLogin. - timeout: este atributo indica el tiempo. Después de validar la identidad del usuario. Pasado este tiempo. El valor predeterminado es 30 minutos. - path: aquí se indica la ruta de acceso para la cookie.<forms name=".139 - . Dejaremos el valor “all” que es el predeterminado y sugerido (se basa en el algoritmo Triple DES para su cifrado). indicaremos en la etiqueta <user> el nombre de usuario y contraseña válidos para los usuarios autenticados. en minutos. Podemos suministrar una lista de credenciales válidas a través de la etiqueta <credentials>. se le vuelve a dirigir hacia la URL original solicitada. la cual debe presentar un formulario que pida los datos de autenticación del usuario (login y password). protection: este atributo indica el método utilizado para proteger los datos de la cookie.

usuario2. Por ejemplo: <allow users="usuario1.<user name="usuario2" password="AETDS43ASDFE2814ASDF" /> </credentials> </authentication> Según se indique en el atributo passwordFormat de la etiqueta <credentials>. y se deniega el acceso a todos los demás usuarios. AUTORIZACIÓN DE USUARIOS En ASP. 12.140 - . <authorization> <allow users="usuario1" /> <deny users="*" /> </authorization> En este ejemplo. con el nombre de usuario y contraseña.NET realizará una llamada al método FormsAuthentication. Para ello.Authenticate. utilizaremos las subetiquetas <allow> y <deny> de la etiqueta <authorization> en nuestro fichero web. Cada elemento <allow> o <deny> debe contener un atributo users donde especificar al usuario al que se le da acceso o se le deniega.config.usuario3" /> Para indicar el método HTTP utilizaremos el atributo Verb de las etiquetas <allow> y <deny>: <allow VERB="POST" users="usuario4. las contraseñas se pueden almacenar en texto no cifrado (valor “Clear” ) o cifrado como código de tipo SHA1 o MD5 (valor “SHA1” o “MD5”).4.usuario5" /> <deny VERB="POST" users="*" /> . y se encargará de verificar que el usuario es un usuario válido.NET podemos permitir o denegar el acceso a grupos de usuarios. se concede acceso al usuario llamado usuario1. La aplicación ASP. Podemos especificar varios usuarios en un único elemento mediante una lista de valores separados por comas.

permitimos a usuario4 y usuario5 utilizar el método POST de HTTP en los recursos solicitados. podríamos usar el carácter (?) para denegar el acceso a los usuarios no autenticados y usar una atenticación basada en formularios (como hemos visto en el apartado anterior). no autenticados). Existen dos nombres de usuario especiales que podemos usar en el atributo users: El carácter (*): significa todos los usuarios. Por ejemplo. . El carácter (?): significa usuarios anónimos (es decir. mientras que sólo dejamos utilizar el método GET de HTTP al resto de los usuarios.141 - .<allow VERB="GET" users="*" /> En esta configuración.config predeterminado permite el acceso a todos los usuarios. para asegurarnos de que únicamente los usuarios autenticados podrán acceder a nuestros recursos: <authorization> <deny users="?" /> </authorization> Debemos tener en cuenta que el archivo web.

RECUERDE - Como mecanismo de seguridad en ASP. no está permitido realizar peticiones directas a los ficheros global.NET.config.config.asax o web. - Podemos establecer mecanismos de autenticación y autorización de usuarios en las aplicaciones ASP. . - Es posible bloquear valores de configuración en los ficheros de configuración XML para evitar que puedan sobrescribirse en un nivel inferior.NET mediante la configuración de las etiquetas <authentication> y <authorization> en los ficheros web.142 - .

NET.NET funciona sobre sobre IIS 5. Protocolo de comunicaciones utilizado por los navegadores de Internet para el acceso a recursos Web.143 - . ASP 3 es la anterior versión de ASP a las nuevas páginas ASP. Especificación de tipos básicos para la integración de distintos lenguajes de programación en Microsoft . CTS. H HTML. páginas ASPX. D DHTML. . Jscript. C CLR. Lenguaje de programación orientado a objetos desarrollado por Sun Microsystems. HTTP. es parecido a C++ y Java. páginas ASP. de video.0. Common Type System. como ficheros de imágenes.NET. Se utilizan para dar formato a documentos HTML o XML. separando los datos del formato de presentación. Se forma de una conjunción de HTML. etc. Lenguaje para la creación de páginas Web relacionadas entre sí por hipertexto. Internet Information Server. Hojas de Estilo en Cascada.NET. C#.NET). Visual Basic . Common Language Runtime o Motor de Ejecución Común incluido en el paquete Microsoft . . CSS.GLOSARIO A ASP. Active Server Pages. hojas de estilo en cascada (CSS) y lenguajes de script como JavaScript o VBScript. Lenguaje creado por Microsoft para su plataforma . HiperText Markup Language. Es el servidor Web de Microsoft. I IIS. páginas HTML.NET (como C#. HiperText Transport Protocol. Cascading Style Sheets.NET. J Java. Se trata de las páginas activas del servidor Internet Information Server. ASP. Dinamic HTML (HTML dinámico).

las páginas HTML incluyen el código PHP embebido en ellas.144 - . Se utiliza para la construcción de documentos de datos estructurados multi-propósito. P PHP. . Personal Home Page. V VBScript. Las páginas PHP presentan una técnica similar a las páginas ASP de Microsoft. Se basan en la especificación de Servlets de SUN. X XML. J2EE.NET. Lenguaje de marcado extensible. JSP. Procesador de Hipertexto.JavaScript. Enterprise Edition. Lenguaje de script desarrollado por Microsoft. se genera código HTML dinámicamente. es decir. eXtensible Markup Language. Java Server Pages. y al ejecutarlas. Visual Basic Script. Modelo de desarrollo y aplicación propuesto por SUN y basado en el desarrollo de componentes Java. M MSIL. Java 2. Solución de SUN Microsystems para el desarrollo de aplicaciones Web. Lenguaje de script desarrollado por Netscape y utilizado en los navegadores de Internet. Lenguaje intermedio para la ejecución de aplicaciones en Microsoft .