Вы находитесь на странице: 1из 145

Introduccin al desarrollo de aplicaciones web

ndice_
1. INTRODUCCIN ...............................................................................3 2. ASP.NET ...........................................................................................5 3. JAVA (JSP, SERVLETS) .....................................................................5 4. PHP..................................................................................................6 5. DHTML .............................................................................................6

formacin digital

Introduccin al desarrollo de aplicaciones web


1. INTRODUCCIN El desarrollo de aplicaciones para el entorno Internet ha cambiado mucho desde su aparicin hace algunos aos. El mundo de la informtica avanza rpidamente y las necesidades bsicas de un sitio web han cambiado. Al principio, el desarrollo de pginas web se limitaba prcticamente al uso del lenguaje de marcado HTML (lenguaje de marcado de hipertexto), un lenguaje sencillo basado en la especificacin 3.2, sin capas ni estilos, con el que se obtenan pginas estticas cuya labor nicamente era suministrar informacin personal del autor o de la empresa (de forma textual o a travs de imgenes), sin proporcionar ninguna interaccin con el usuario. Actualmente, un sitio web suele soportar la recogida de datos a travs de formularios, inclusiones de archivos (subir ficheros al servidor, como imgenes o documentos), envo de correos electrnicos, acceso a bases de datos, redireccionamiento de acuerdo al perfil del usuario, etc. En definitiva, hoy da, las aplicaciones web se disean con el propsito de suministrar al usuario una serie de servicios ms complejos.

Como ejemplo podemos citar una plataforma de teleformacin que soporte matriculacin de alumnos, subida de cursos, exmenes, almacenamiento de notas, estadsticas de tiempos sobre conexiones al centro virtual, visitas por curso y alumno, etc. Cada vez que el alumno entra en la plataforma y se identifica (introduce su nombre de usuario y contrasea), se le presenta una pgina personalizada (con acceso a cada uno de los cursos en que est matriculado). Asimismo, cuando el alumno realiza un ejercicio o examen, el sistema puede comprobar los resultados introducidos y otorgarle una nota que almacena en una base de datos para ir elaborando un expediente. Estos son ejemplos de pginas dinmicas, cuyo aspecto final va a depender de las acciones del usuario y de la forma de interactuar que tenga con la aplicacin: en cuntos cursos se ha matriculado, si ha aprobado o suspendido un examen, los temas o respuestas que ha dado en los foros de su curso, etc.

Entre las aplicaciones tpicas desarrolladas en la actualidad, se encuentran los portales, las tiendas o comercios virtuales, aplicaciones publicitarias, de ocio (portales de juegos), etc. Estos desarrollos se caracterizan por el alto nmero de usuarios que tienen que soportar y por la calidad de la interfaz de usuario, el diseo y el sistema de navegacin presentados.

Introduccin al desarrollo de aplicaciones web

Ejemplo de aplicacin web actual: plataforma de teleformacin.

Por otra parte, los desarrollos Internet se implementan sobre los protocolos y los lenguajes de Internet. A su vez, estos protocolos son estndares que implementan una serie de mecanismos bsicos para permitir el paso de informacin entre los equipos clientes de los usuarios (que contienen los navegadores de Internet) y los equipos servidores (que contienen la aplicacin), y son principalmente el protocolo TCP/IP (Protocolo de Control de Transmisin / Protocolo de Internet) y HTTP (Protocolo de Transmisin de Hipertexto).

A mayor complejidad de aplicaciones, mayor complejidad y potencia de herramientas y nuevas tecnologas usadas en su programacin.

En los prximos apartados, vamos a estudiar una serie de tecnologas de desarrollo web utilizadas en la actualidad.

Introduccin al desarrollo de aplicaciones web


2. ASP.NET ASP (Active Server Page) es la tecnologa que desarroll Microsoft para la creacin de pginas dinmicas del lado del servidor. Para escribir pginas ASP colocamos lenguajes scripts (VBScript o JavaScript) junto al cdigo HTML. En ASP 3.0, el ltimo ASP, tenemos objetos integrados disponibles para el programador, como son: Application, ASPError, Request, Response, Server, Session y ObjectContext. La tecnologa sucesora de ASP, ASP.NET, es un Framework para aplicaciones web desarrollado y comercializado por Microsoft que apareci en Enero de 2002 con la versin 1.0 del .NET Framework. ASP.NET se cimienta sobre el Common Lenguaje Runtime (CLR) conformando una ventaja al programador al poder escribir cdigo en cualquier lenguaje soportado por el .NET Framework. Las pginas ASP.NET son conocidas oficialmente como web forms (formularios web) y son la principal herramienta de construccin de aplicaciones web. ASP.NET tambin incluye la tecnologa necesaria para el desarrollo de servicios Web XML, que permiten construir aplicaciones distribuidas basadas en la Web. Normalmente, las aplicaciones ASP.NET se ejecutan con el servidor Microsoft IIS (Internet Information Server) como servidor web. No obstante, existe una manera de utilizar el servidor web Apache en su lugar (aunque con deficiencias).

3. JAVA (JSP, SERVLETS) Java es la solucin de SUN Microsystems para el desarrollo de aplicaciones web. Consta de un conjunto de libreras y API (Interfaz de Programacin de Aplicaciones) de desarrollo, que incluye un conjunto de objetos de servidor o Servlets, y un sistema de programacin de pginas con un modelo similar al de ASP (introduciendo cdigo Java embebido en pginas HTML): pginas JSP (Java Server Pages, Pginas de Servidor Java). Este modelo de Servlets y pginas JSP, al estar directamente basado en Java presenta todas las ventajas de este lenguaje, como la orientacin a objetos o la disponibilidad de todas las libreras adicionales de Java (generacin de imgenes, comunicaciones, seguridad, encriptacin, etc.).

Introduccin al desarrollo de aplicaciones web


4. PHP PHP corresponde a las iniciales de Personal Home Page. Este lenguaje de programacin tiene una sintaxis similar a los lenguajes C y Perl, y se interpreta por un servidor web Apache bajo sistemas Unix/Linux (tambin han salido al mercado versiones para sistemas Windows, aunque no siempre podremos utilizar todas sus caractersticas bajo este sistema operativo). PHP presenta una tcnica similar a las pginas ASP de Microsoft, es decir, las pginas HTML incluyen el cdigo PHP embebido en ellas y, al ejecutarlas, se genera cdigo HTML dinmicamente. Por otro lado, es preciso mencionar que soporta clases y dispone de un gran nmero de libreras de funciones para realizar operaciones avanzadas como acceso a bases de datos, correo electrnico, transferencia de ficheros, comunicaciones, etc. Por ltimo, las pginas PHP tambin se han extendido mucho en los ltimos aos (son las pginas web que vemos con extensin .php o .phtml).

5. DHTML Sus siglas significan Dinamic HTML (HTML dinmico). Se forma de una conjuncin de HTML, hojas de estilo en cascada (CSS), lenguajes de script como JavaScript o VBScript, y la jerarqua de objetos DOM. Estos lenguajes de script se ejecutan en la mquina cliente (en el navegador del usuario que solicita una pgina). De hecho, sta es una gran diferencia con el resto de las anteriores tecnologas que hemos estudiado en los apartados anteriores. En la actualidad, el desarrollador web utilizar alguna de estas tecnologas de servidor. Dichas tecnologas aportarn numerosas ventajas como la unin entre la lgica principal de la aplicacin y el HTML dinmico. Con este ltimo, se consiguen pginas ms eficientes y con efectos que la hacen mucho ms vistosas (alternancia de imgenes, capas, cambios de estado provocados por eventos, etc.). En definitiva, estos lenguajes no permiten el desarrollo de cualquier proyecto en Internet. Es ms un complemento para los desarrolladores que el ncleo de verdaderas aplicaciones web.

Introduccin al desarrollo de aplicaciones web


El desarrollo de aplicaciones web ha evolucionado rpidamente en los ltimos aos. Las pginas estticas que usaban nicamente el lenguaje HTML 3.2, han pasado a sitios web interactivos que ofrecen multitud de servicios a los usuarios. Actualmente se utilizan tecnologas como: DHTML (HTML, CSS y lenguajes de script, como VBScript o JavaScript, que se ejecutan en el cliente). PHP, JSP y Servlets. ASP.NET (tecnologas que se ejecutan en el servidor).

recuerde_

Introduccin a .NET

ndice_
formacin digital

1. INTRODUCCIN ...............................................................................3 2. REQUISITOS DEL SISTEMA ...............................................................3 3. MICROSOFT .NET FRAMEWORK.........................................................4 3.1. CLR O COMMON LANGUAGE RUNTIME ....................................6 3.1.1. CLS o Common Language Specification .......................6 3.1.2. CTS o Common Type System.......................................6 3.1.3. IL, MSIL o Microsoft Intermediate Lenguaje ...............7 3.2. BIBLIOTECA DE CLASES .NET FRAMEWORK ...........................8 3.3. LO NUEVO DE .NET FRAMEWORK 3.0 Y 3.5...........................10 3.3.1. WPF o Windows Presentation Foundation .................11 3.3.2. WCF o Windows Communication Foundation.............11 3.3.3. WWF o Windows Workflow Foundation.....................12 3.3.4. CardSpace ................................................................12 3.3.5. LINQ o Lenguaje-Integrated Query ..........................12 3.3.6. ASP.NET AJAX ..........................................................12 3.3.7. ADO.NET Entity Framework ......................................13

Introduccin a .NET
1. INTRODUCCIN En este tema estudiaremos los requisitos necesarios para instalar .NET. Adems, explicaremos varios conceptos bsicos sobre la arquitectura de la plataforma y conoceremos cmo ha evolucionado hasta llegar a la versin actual .Net Framework 3.5. Esta base terica nos facilitar el entendimiento y contextualizacin de ASP.NET como un Framework de .NET para el desarrollo de aplicaciones web desarrollado por Microsoft.

2. REQUISITOS DEL SISTEMA A continuacin, enumeramos los requisitos necesarios para poder instalar .NET Framework: Sistema operativo de la familia Windows (32-bit y 64-bit) excepto los siguientes: Microsoft Windows 95, Microsoft Windows 98, Microsoft Windows Millennium Edition, Microsoft Windows NT Server, Windows NT Workstation, Windows NT Server Enterprise Edition, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, Windows 2000 Datacenter Server, Windows Server 2003, Enterprise Edition for Itanium-based Systems, Windows Server 2003, Datacenter Edition for Itanium-based Systems. Tambin se pueden desarrollar aplicaciones ASP.NET usando otros sistemas operativos gracias al proyecto Mono (http://www.mono-project.com/Main_Page), que es un grupo de herramientas libres compatible con .NET. Microsoft Data Access Components (MDAC) 2.8 for data access applications y Windows Installer version 3.0 (probablemente, ambas herramientas estn ya instaladas en nuestro sistema). Requisitos del hardware:

Procesador Mnimo Recomendado 400 Mhz 1 Ghz

Memoria 96 MB 256 MB

Espacio en disco 32-bit 64-bit 280 MB 610 MB

Servidor Web Internet Information Server y permisos para guardar archivos en el servidor web. Puede ser que an teniendo uno de los sistemas operativos necesarios no tengamos instalado el IIS, que no viene en la configuracin por defecto de instalacin. En este caso, instalaremos el IIS (slo ser indispensable si queremos alojar y publicar la pgina web en nuestro equipo).

Introduccin a .NET
Microsoft .NET Framework SDK (Software Development Kit): es la implementacin de la plataforma .NET sobre la que se ejecutarn las pginas ASP.NET. Es decir, el .NET Framework SDK contiene todas las clases que componen la plataforma .NET. Su distribucin es gratuita y podemos descargarlo del sitio web de desarrolladores de Microsoft en http://msdn.microsoft.com. Adems, en esta direccin podemos encontrar abundante documentacin sobre el tema. Por otra parte, tambin es recomendable, aunque no obligatorio, disponer de la aplicacin Visual Studio .NET, que es un entorno de desarrollo para la plataforma .NET. Este entorno integrado ofrece una serie de ayudas visuales y utilidades muy interesantes, adems de valiosa documentacin que nos ayudar en el desarrollo, prueba y depuracin de nuestras aplicaciones ASP.NET. Adems, las distribuciones de la aplicacin de Visual Studio .NET suelen incluir el paquete Microsoft .NET Framework SDK, como parte opcional de la instalacin, por si el equipo donde va a ser instalado el Visual Studio .NET1 no lo tiene todava. Este entorno es muy recomendable pero no imprescindible para escribir nuestras aplicaciones ASP.NET. De hecho, tambin puede usarse cualquier otro editor de texto comn, como el bloc de notas de Windows o la aplicacin EditPlus, aunque stos no proporcionan las utilidades del entorno Visual Studio .NET. Adems, si utilizamos Visual Studio o Visual Web Developer podemos probar las pginas web de ASP.NET usando el servidor de desarrollo de ASP.NET, que ejecuta las pginas localmente en el equipo sin necesidad de instalar IIS.

3. MICROSOFT .NET FRAMEWORK .NET Framework 3.5 permite el desarrollo de aplicaciones a travs del uso de un conjunto de herramientas y servicios que proporciona, y que podemos agrupar en tres bloques principales: El Entorno de Ejecucin Comn o Common Language Runtime (CLR) es el ncleo de .NET Framework. Se encarga de la gestin del cdigo, su ejecucin, los temas de manipulacin de memoria, etc.

Podemos

conseguir

una

versin

de

evaluacin

de

Visual

Studio

.NET

en

el

sitio

http://www.microsoft.com/express/download/

Introduccin a .NET
La jerarqua de clases bsicas de la plataforma o .NET Framework Base Classes. Este conjunto de clases constituye un API de servicios para utilizar en la programacin de nuestras aplicaciones. Por ejemplo, las clases para acceder a bases de datos (ADO.NET), para gestionar ficheros XML, gestin de hilos (threading), para el desarrollo de aplicaciones web (ASP.NET), etc. El motor de generacin de interfaz de usuario. Permite crear interfaces para la Web (con la tecnologa ASP.NET), para el tradicional entorno Windows (Windows Forms) o para el nuevo Windows Presentation Foundation (WPF). En este manual vamos a profundizar en aspectos relacionados con ASP.NET aunque tambin veremos otros ms generales dentro de la plataforma .NET. Por otra parte, ASP.NET es un Framework para aplicaciones web. Podemos definirlo como un subconjunto de .NET Framework dedicado al desarrollo de sitios web dinmicos, aplicaciones web y servicios web XML. A continuacin, podemos observar un esquema de la composicin del .NET Framework y como ha ido evolucionando gracias a la insercin de nuevas tecnologas y mejora de sus caractersticas.

LINQ

ADO.NET Entity Framework

ASP.NET AJAX

WPF

WCF

WF

CardSpace

Biblioteca de clases .NET Framework

ASP.NET

Windows Forms

ADO.NET

IO

XML

THREADING

Etc.

CLR (Common Language Runtime)

CTS

CLS

MSIL

Gestin de memoria

.NET Framework

Introduccin a .NET
En este manual vamos a centrarnos en la parte de ASP.NET que, como hemos dicho, constituye la solucin de Microsoft para desarrollar aplicaciones web, aunque la base sobre la que se apoya, el paquete .NET, es comn para desarrollar otro tipo de aplicaciones para Windows. 3.1. CLR O COMMON LANGUAGE RUNTIME El CLR es la base del sistema Microsoft .NET. Este motor hace que sea posible el desarrollo basado en mltiples lenguajes y que sea posible la integracin y ejecucin de todos ellos en el entorno .NET. Esto se realiza gracias al seguimiento de las especificaciones del CLR por parte de los creadores de lenguajes y herramientas de desarrollo. En los prximos apartados vamos a estudiar una serie de trminos relacionados con el CLR (Common Language Runtime) o Lenguaje comn en tiempo de ejecucin: CLS, CTS e IL. 3.1.1. CLS o Common Language Specification Esta Especificacin Comn de Lenguajes se conoce como CLS (Common Language Specification) y consiste en un conjunto de caractersticas comunes que deben cumplir todos los lenguajes de la plataforma, para poder integrarse entre s. Esta integracin se refiere a que, por ejemplo, es posible escribir una clase en C# y heredar de dicha clase desde VB.NET. Esto se produce gracias a que el entorno de ejecucin es comn y el cdigo compilado no pasa directamente a cdigo ejecutable puro, sino a un cdigo intermedio (como veremos en el apartado de IL). Por ello, podemos decir que la plataforma .NET tiene soporte multi-lenguaje. Algunos de los lenguajes soportados actualmente son: C#, Visual Basic .NET, Delphi (Object Pascal), C++, C, J#, Perl, Python, Fortran, Ruby, Cobol y PowerBuilder. 3.1.2. CTS o Common Type System Estas siglas corresponden a Common Type System o Sistema Comn de Tipos. Es el mecanismo del CLR que permite definir el modo en que los tipos sern creados y manipulados por el entorno de ejecucin de .NET Framework. As, todos los lenguajes pueden trabajar basndose en una serie de especificaciones de datos que hacen posible el intercambio de informacin y trabajo con las libreras bsicas de la plataforma .NET.

Introduccin a .NET
3.1.3. IL, MSIL o Microsoft Intermediate Lenguaje Es un lenguaje parecido al bytecode de Java, hacia el cual cualquier compilador integrado con Microsoft .NET (c#, VisalBasic, etc.) deber compilar su cdigo fuente, ya que es el nico entendible por el CLR. La siguiente figura muestra un diagrama con el proceso de generacin de lenguaje intermedio a partir del cdigo fuente:

Cdigo fuente (C#, VB.NET, C++,...)

CLS Compilador CTS

Cdigo IL

Compilador a cdigo nativo

HW y SO

Lo que hace posible que todos los lenguajes usados en .NET puedan compilarse a un lenguaje unificado (IL) es que cumplen con una especificacin comn (CLS) y con un sistema comn de tipos (CTS).

Introduccin a .NET
El cdigo auxiliar generado se compila a continuacin en cdigo nativo y se optimiza para la arquitectura de hardware concreta en la que se ejecuta, utilizando los servicios de compilacin JIT (Just In Time) de CLR. En resumen, el JIT es otro elemento de .NET Framework que se encarga de convertir el cdigo MSIL en cdigo de nuestro sistema operativo. En definitiva, este cdigo es independiente de la plataforma y del lenguaje que lo haya originado y es un lenguaje intermedio comn a todos los sistemas operativos que soporten .NET Framework. 3.2. BIBLIOTECA DE CLASES .NET FRAMEWORK Las bibliotecas de clases proporcionan la base constitutiva y fundamental para cualquier aplicacin que se desarrolle. Es un componente de .NET Framework que incluye clases, interfaces y tipos de valores que proporcionan acceso a variadas funciones del sistema como: Representar tipos de datos base y excepciones. Encapsular estructuras de datos. Realizar E/S. Obtener acceso a informacin sobre tipos cargados. Control y comprobacin de seguridad de .NET Framework. Proporcionar: acceso a datos, interfaz grfica para el usuario (GUI).

Los tipos en .NET Framework son la base para crear aplicaciones, componentes y controles de .NET. Dichos tipos utilizan un esquema sintctico de punto lo que revela la presencia de una jerarqua (por ejemplo, en System.IO donde System es un espacio de nombres superior en la jerarqua a System.IO). Este esquema agrupa tipos relacionados en espacios de nombres o namespaces que evita ambigedades y hace ms fcil buscar y hacer referencia a cada uno de ellos. Los espacios de nombres ms usados son: (ver pgina siguiente).

Introduccin a .NET

ESPACIO DE NOMBRES

UTILIDAD DE LOS TIPOS DE DATOS QUE CONTIENE

Tipos de uso muy frecuente como: los tipos bsicos, tablas, System excepciones, fechas, nmeros aleatorios, recolector de basura, entrada/salida en consola, etc. Colecciones de datos de uso comn como: pilas, colas, listas, diccionarios, etc.

System.Collections

System.Data

Manipulacin

de

bases

de

datos.

Forman

la

denominada

arquitectura ADO.NET.

System.IO

Manipulacin de ficheros y otros flujos de datos.

System.Net

Realizacin de comunicaciones en red.

System.Reflection

Acceso a los metadatos que acompaan a los mdulos de cdigo.

System.Runtime.Remoting

Acceso a objetos remotos.

System.Security

Acceso a la poltica de seguridad en que se basa el CLR.

System.Threading

Manipulacin de hilos.

System.Web.UI.WebControls

Creacin de interfaces de usuario basadas en ventanas para aplicaciones web.

System.XML

Acceso a datos en formato XML.

System.Linq

Consultar archivos XML, bases de datos relacionales, objetos .NET y/u otro tipo de estructura de datos.

Introduccin a .NET
En resumen, se trata de una coleccin orientada a objetos de tipos reutilizables que se emplean para desarrollar aplicaciones nuevas y de distinta naturaleza: aplicaciones clsicas de interfaz de usuario, de lnea de comandos, aplicaciones basadas en Web Forms, servicios web, servicios Windows, aplicaciones de Windows Presentation Foundation, etc. 3.3. LO NUEVO DE .NET FRAMEWORK 3.0 Y 3.5 En los primeros aos de desarrollo de aplicaciones Windows, todas las aplicaciones estaban escritas sobre la Interfaz de Programacin de Aplicaciones (API) de Windows en C o C++. Cuando apareci Visual Basic y posteriormente Internet, los programadores deban especializarse en el desarrollo de aplicaciones C, C++ (MFC/ATL), aplicaciones Visual Basic o aplicaciones Active Server Page (ASP). Con .NET Framework se puede desarrollar cualquier tipo de aplicacin. An as, qu ganamos? La respuesta es un modelo de programacin ms unificado, la mejora de la seguridad y una nueva forma de escribir potentes aplicaciones web completas.

POO Potencia Expresividad

API consistente independiente del lenguaje y el modelo de programacin

MFC/ATL
Basado en estndares

Windows API
RAD Composicin Delegacin

Visual Basic Forms

ASP
Web Estndar en HTML

Extensible

En los siguientes apartados, haremos un repaso por alguna de las nuevas funcionalidades y caractersticas que fueron incluidas en las versiones posteriores a la 2.0 del Framework y que se utilizan actualmente.

10

Introduccin a .NET
3.3.1. WPF o Windows Presentation Foundation Windows Presentation Foundation representa a la nueva generacin de aplicaciones cliente de Windows. Se caracteriza por un estilo de presentacin de ventanas muy llamativo y novedoso para el usuario desde el punto de vista visual. Algunos ejemplos de ellos son: Yahoo Messenger (http://messenger.yahoo.com/platform/win) o la aplicacin de ejemplo para atencin sanitaria: Contoso Healthcare Sample Application (http://windowsclient.net/downloads/folders/wpfsamples/entry3754.aspx) que se muestra en la ilustracin siguiente:

3.3.2. WCF o Windows Communication Foundation Es un conjunto de tecnologas orientadas al desarrollo de sistemas interconectados o distribuidos y al desarrollo de aplicaciones basadas en arquitecturas orientadas a servicios. WCF engloba una gran variedad de funcionalidades de sistemas distribuidos que abarca transportes, mensajera, codificacin, etc. Adems, puede ejecutarse en una mquina local, una LAN o sobre Internet. De forma predeterminada se incluye en Windows Vista.

11

Introduccin a .NET
3.3.3. WWF o Windows Workflow Foundation Se trata del nuevo componente del Framework destinado a desarrollos empresariales relacionados con procesos de negocios. Es una tecnologa que nos permite definir e implementar flujos de trabajo que controlen el buen comportamiento y operacin de nuestras aplicaciones de una manera ms sencilla. Las empresas evolucionan y necesitan continuamente adaptar sus sistemas a las nuevas necesidades. Con WWF se evita que los cambios y mejoras en las aplicaciones desemboquen en procesos demasiado complejos. 3.3.4. CardSpace Se trata de un cliente de un servicio de identificacin digital para servicios on-line muy seguro y simple. De hecho, nos brinda la posibilidad de iniciar sesin en los sitios web compatibles sin tener que dar nuestro nombre de usuario y contrasea. CardSpace nos posibilita crear tarjetas de identificacin basadas en XML con las que podemos identificarnos en aquellos servicios que admitan esta tecnologa. En suma, Microsoft proporciona a los usuarios la capacidad de crear y administrar sus tarjetas de informacin y de tener acceso a ellas. 3.3.5. LINQ o Lenguaje-Integrated Query Es una nueva caracterstica de .NET Framework 3.5 y Visual Studio 2008 que incorpora capacidades de consulta a la sintaxis de C# y Visual Basic. .NET Framework 3.5 incluye ensamblados de proveedor de LINQ que habilitan su uso para realizar consultas sobre bases de datos de SQL Server, conjuntos de datos de ADO.NET, ficheros XML y tambin sobre colecciones de .NET Framework. 3.3.6. ASP.NET AJAX AJAX o Asynchronous JavaScript And Xml (JavaScript asncrono y XML) es una tecnologa de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el cliente mientras se mantiene una comunicacin asncrona con el servidor en segundo plano.

12

Introduccin a .NET
AJAX est basado en estndares abiertos lo que hace que sea una tcnica admitida por mltiples plataformas utilizable en muchos navegadores. As pues, .NET Framework 3.5 incorpora mejoras en las caractersticas de ASP.NET y Visual Web Developer, siendo el avance ms significativo la compatibilidad con el desarrollo de sitios web habilitados para AJAX. 3.3.7. ADO.NET Entity Framework Entity Framework es un conjunto de tecnologas de ADO.NET que ha sido diseado para aplicaciones centradas en datos y que proporciona una plataforma para la programacin con datos que eleva el nivel de abstraccin del nivel lgico relacional al nivel conceptual. Entity Framework admite cdigo que es independiente de cualquier motor de

almacenamiento de datos. Asimismo, permite trabajar con datos en forma de objetos, por ejemplo, con empleados y ventas, sin tener que pensar en las tablas ni en las columnas que almacenan los datos.

13

Introduccin a .NET
Para desarrollar aplicaciones ASP.NET necesitamos como mnimo: un sistema operativo de la familia Windows compatible con dichas aplicaciones, MDAC, Windows Installer version 3.0 y el paquete Microsoft .NET Framework SDK (Software Development Kit). Tambin se pueden desarrollar aplicaciones ASP.NET en otros sistemas operativos con .NET. Es recomendable disponer de la aplicacin Visual Studio .NET, que es un entorno de desarrollo para la plataforma .NET. Aunque no es imprescindible, nuestras pginas ASP.NET podemos escribirlas en cualquier editor de textos. ASP.NET es un subconjunto de la tecnologa .NET de Microsoft, en concreto, la parte relativa a la programacin web. El paquete .NET tambin incluye las clases necesarias para soportar las aplicaciones tradicionales de Windows, las denominadas aplicaciones Windows Forms. La plataforma .NET tiene soporte multi-lenguaje. Algunos de los lenguajes soportados actualmente son: C#, Visual Basic .NET, Delphi (Object Pascal), C++, C, J#, Perl, Python, Fortran, Ruby, Cobol y PowerBuilder. Las mejoras incluidas en el Framework tienen como objetivo una mayor abstraccin desde el punto de vista del programador as como de los datos relacionales, independencia del origen de los datos, interfaces de usuario ms vistosas, etc. Basar la comunicacin en estndares para asegurar que el cdigo de .NET Framework se pueda integrar con otros tipos de cdigo y ofrecer al programador rutinas entre tipos de aplicaciones muy diferentes, como las basadas en Windows o en el Web, es el objetivo de Microsoft con la integracin de nuevos componentes y mejora de sus caractersticas. El CLR es la base del sistema Microsoft .NET. Este motor hace que sea posible el desarrollo basado en mltiples lenguajes (tienen que cumplir una especificacin comn, CLS), y la integracin y ejecucin de todos ellos en el entorno .NET -esta integracin es posible gracias al sistema comn de tipos, CTS-. gracias al proyecto Mono (http://www.monoproject.com/Main_Page) que es un grupo de herramientas libres compatible

recuerde_

14

Conceptos de la programacin orientada a objetos

ndice_
formacin digital

1. INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOS (POO) ..............................................................................................3 2. OBJETOS Y CLASES...........................................................................3 3. CARACTERSTICAS DE LOS SISTEMAS ORIENTACIN A OBJETOS (OO) ................................................................................................4 3.1. ENCAPSULACIN .....................................................................4 3.2. ABSTRACCIN .........................................................................5 3.3. HERENCIA................................................................................6 3.4. POLIMORFISMO .......................................................................8 4. MENSAJES Y MTODOS. SOBRECARGA ..............................................8 4.1. MENSAJES................................................................................8 4.2. MTODOS.................................................................................9 4.3. SOBRECARGA ...........................................................................9 5. MODELO DE OBJETOS Y RELACIONES ENTRE CLASES ......................10 6. VENTAJAS E INCONVENIENTES DE LA POO .....................................11

Conceptos de la programacin orientada a objetos


1. INTRODUCCIN A LA PROGRAMACIN ORIENTADA A OBJETOS (POO) La orientacin a objetos es una nueva forma de programar que augura mejoras en la forma de diseo, desarrollo y mantenimiento del software ofreciendo una solucin a largo plazo a los problemas que han existido desde los inicios del desarrollo de software: la falta de portabilidad del cdigo, reusabilidad, cdigo que es difcil de modificar, ciclos de desarrollo largos y tcnicas de codificacin no intuitivas. En este tema vamos a tratar aspectos genricos de la Programacin Orientada a Objetos (POO), necesarios para poder utilizar correctamente el lenguaje en el que vamos a programar nuestras pginas ASP.NET, es decir, el lenguaje C#.

2. OBJETOS Y CLASES El objeto es el concepto principal sobre el cual se fundamenta la tecnologa orientada a objetos. Un objeto puede ser visto como: Una entidad que posee un conjunto de atributos y que es capaz de realizar una serie de acciones. Esto es lo que define al objeto. Una representacin o modelizacin de un objeto real perteneciente a nuestro mundo.

Podemos tener un objeto bicicleta que represente a una bicicleta dentro de nuestra realidad, o bien un objeto factura, automvil o persona.

Estos objetos son casos particulares de entidades llamadas clases en donde se definen las caractersticas comunes a tales objetos.

Ejemplo: Del objeto automvil podemos mencionar como atributos: el modelo, la marca, el color, el nmero de matrcula, nmero de bastidor, entre otros. Algunas acciones que es capaz de realizar un automvil son: frenar, acelerar y cambiar la velocidad. Este objeto automvil es una instancia particular de la clase automvil.

Conceptos de la programacin orientada a objetos


Los parmetros o variables que definen el estado de un objeto se denominan atributos o variables miembro, y las acciones que pueden realizar los objetos se denominan mtodos o funciones miembro. Si lo comparamos con la programacin estructurada, podramos hacer la siguiente aproximacin: los atributos, propiedades o variables miembro seran variables y los mtodos o funciones miembro seran procedimientos y funciones, con la diferencia de que las propiedades y mtodos se heredan de unos objetos a otros. De esta manera, las propiedades de un objeto pueden ser diferentes: Propiedades propias. Estn formadas dentro de la cpsula del objeto. Propiedades heredadas. Estn formadas en un objeto distinto, antepasado de ste (padre, abuelo, etc.). Por otra parte, una clase es una plantilla, molde o prototipo en el que se definen los atributos (variables) y las acciones (mtodos) comunes para todos los objetos de un tipo determinado. Mediante las clases podremos crear (instanciar) objetos de un mismo tipo, que se diferenciarn unos de otros a travs de su estado, es decir, el valor de sus atributos.

Siguiendo con el mismo ejemplo, nuestro automvil es una instancia de la clase de objetos denominada automviles. Esta clase tiene algunos estados (marcha actual, nmero de marchas, color, potencia...) y comportamiento (frenar, girar, encender luces...) en comn. Sin embargo, el estado de cada objeto automvil es independiente y puede ser diferente al del resto de objetos automvil.

Por ltimo, la especificacin comn para todos los objetos del mismo tipo es lo que denominamos clase. Dicho de otro modo, la clase la vamos a utilizar para definir la estructura de un objeto, es decir: estado (atributos) y comportamiento (mtodos). Una vez implementada una clase podremos instanciar (crear) objetos que pertenezcan a esa clase. Asimismo, utilizaremos la misma clase para crear distintos objetos.

3. CARACTERSTICAS DE LOS SISTEMAS ORIENTACIN A OBJETOS (OO) 3.1. ENCAPSULACIN Se trata de la tcnica de ocultar la implementacin interna de un objeto, es decir, cmo est construido y de qu se compone.

Conceptos de la programacin orientada a objetos


Los atributos de un objeto deben encontrarse ocultos al resto de los objetos, esto es, no podemos acceder directamente a dichos atributos para modificar su estado o consultarlo. Para acceder a los atributos de un objeto debemos utilizar mtodos. Normalmente, un objeto ofrece una parte pblica que ser utilizada por otros objetos para interactuar entre s, pero tambin contiene una parte oculta para encapsular los detalles de implementacin del objeto. Por tanto, podemos ver un objeto como una caja negra que tiene un estado determinado que podemos conocer y cambiar mediante una serie de mtodos pblicos que representan la interfaz del objeto. Como los atributos y la implementacin de cada objeto queda oculta a los dems objetos que interaccionan en el programa, se favorece la proteccin de los datos y la localizacin de errores en los programas (ya que cada objeto est altamente especializado y slo se encarga de su tarea). Esto consigue una mayor modularidad y facilita el diseo en equipo de programas y la reutilizacin de clases (componentes), ya que podemos escribir cdigo de manera independiente a la construccin de los diferentes objetos que vamos a utilizar. Adicionalmente, ocultando los detalles de implementacin, podremos realizar cambios en el cdigo interno de los objetos sin que ello afecte a otros objetos que los utilicen o dependan de ellos. 3.2. ABSTRACCIN Es la capacidad de ignorar los aspectos de implementacin de los objetos en los pasos iniciales, con lo que slo necesitamos conocer qu es lo que hace un objeto, y no cmo lo hace, para definir un objeto y establecer las relaciones de ste con otros objetos.

Cuando necesitemos indicarle al objeto automvil que acelere, no nos interesa conocer cmo realiza el objeto este proceso internamente (a travs de un cambio de marcha, mayor consumo de combustible, etc.) sino nicamente el resultado de acelerar, es decir, el resultado de indicarle que realice dicho comportamiento.

En definitiva, un objeto lo podemos representar como dos circunferencias: una interna que contiene todos los detalles de implementacin (variables y mtodos privados) y que permanece oculta al resto de objetos, y otra circunferencia concntrica externa, que representa lo que el objeto muestra al mundo exterior, la interfaz pblica que permite interactuar con l.

Conceptos de la programacin orientada a objetos

Atributos y mtodos privados (encapsulados)

Mtodos pblicos (interfaz del objeto)

Como conclusin, podemos decir que no es necesario entender la implementacin interna de un objeto para poder utilizarlo. 3.3. HERENCIA Es el mecanismo mediante el cual podemos reutilizar clases ya definidas. As, una vez definida una clase, podemos usarla como base para generar clases ms complicadas o especializadas. Es decir, los mtodos y atributos de una clase pueden transmitirse a las clases que descienden de ella. Como la clase hija puede aadir atributos, mtodos y redefinir los mtodos de la clase padre, podemos ver la herencia como una sucesiva especializacin de las clases. La clase de la que se hereda se denomina clase padre o superclase, y la clase que hereda se denomina clase hija o subclase.

Un turismo y una limusina son distintos tipos de automviles. En una aplicacin orientada a objetos, el turismo y la limusina podran ser subclases de la clase automvil. El turismo y la limusina comparten los atributos velocidad actual, marcha actual, nmero de plazas, etc. definidos en la clase automvil. Igualmente, cada subclase tambin hereda el mismo comportamiento definido en la superclase, por lo que, un turismo y una limusina tambin pueden realizar las acciones (mtodos) definidos en la clase automvil: frenar, cambiar de marcha, girar, etc.

Para verificar que la herencia entre dos clases es correcta, debemos hacernos la pregunta es un tipo de...?.

En nuestro ejemplo tenemos una clase limusina que hereda de la clase automvil. Esta herencia contesta claramente a esta pregunta: una limusina es tambin un automvil?: cierto.

Por otra parte, cada subclase puede definir atributos y mtodos propios para ella que permiten diferenciar a la subclase de su superclase.

Una limusina puede incluir un telfono incorporado, una nevera o una televisin, caractersticas que no tiene un automvil normal.

Adems, las subclases tambin pueden sobrescribir mtodos de la superclase para proporcionar un comportamiento especial.

Conceptos de la programacin orientada a objetos

La clase automvil puede contener un mtodo ObtenerNmeroDeMarchas() que siempre devuelva 5, mientras que un frmula 1 puede tener hasta 7 marchas, por lo que sobrescribira este mtodo para devolver 7 en lugar de 5.

No hay lmite en cuanto al nivel de herencia. Esto da lugar a una jerarqua de clases.

Podramos seguir definiendo nuevas clases que hereden de la clase Turismo, por ejemplo, las clases Monovolumen o Familiar.

La herencia puede ser simple, si la clase hija hereda de una nica clase padre, o mltiple, si hereda de varias clases1. Por ltimo, tambin podemos definir clases abstractas, que son clases que definen comportamientos genricos y en las que algunos mtodos no han sido implementados (son mtodos abstractos). El comportamiento de estos mtodos es totalmente libre para las subclases que hereden de sta y que debern implementar dichos mtodos abstractos para poder ser instanciadas.

Ejemplo de jerarqua de clases (herencia simple): Automvil

Turismo

Limusina

Familiar

Monovolumen

El lenguaje que usaremos en la programacin de las pginas ASP.NET de este manual, C#, soporta

herencia simple.

Conceptos de la programacin orientada a objetos


3.4. POLIMORFISMO Es otra ms de las caractersticas propias de la POO. Expresa la posibilidad de que el mismo mensaje, enviado a objetos diferentes, ejecute mtodos distintos. Por lo tanto, es posible definir operaciones con el mismo nombre dentro de clases distintas, donde cada operacin tendr la implementacin necesaria y propia para cada clase. Esto nos permite crear un interfaz comn para una serie de clases.

Por ejemplo, supongamos que tenemos en nuestra aplicacin, una clase Enteros para modelar un nmero entero, y una clase Matrices, para modelar una matriz matemtica. Ambas clases necesitarn saber cmo se suman (cmo se suman dos objetos enteros y cmo lo hacen dos objetos matrices). Podemos definir un mtodo suma() para la clase Enteros y otro mtodo suma() para la clase Matrices (ambas clases comparten el mismo nombre para esa operacin pero la implementacin de estos mtodos ser distinta en cada clase, ya que no es lo mismo sumar enteros que matrices).

4. MENSAJES Y MTODOS. SOBRECARGA 4.1. MENSAJES Los mensajes son el mecanismo mediante el cual dos objetos pueden interactuar, comunicarse entre s. Un objeto solitario generalmente no es muy til. Casi siempre aparece como un componente de un programa mayor o una aplicacin que contiene muchos otros objetos. A travs de la interaccin de esos objetos, conseguimos una funcionalidad mayor. Los objetos interactan y se comunican mediante el envo de mensajes. As, cuando un objeto A quiere que otro objeto B realice una accin (denominado mtodo de la interfaz de B), el objeto A enva un mensaje al objeto B. Por tanto, un mensaje enviado a un objeto representa la invocacin de un determinado mtodo sobre dicho objeto, es decir, la ejecucin de una operacin sobre el objeto. De esta forma, los dos objetos implicados se comunican, ya que la ejecucin de ese mtodo devolver el estado del objeto invocado o lo modificar (cambiar su estado).

Conceptos de la programacin orientada a objetos


4.2. MTODOS Las acciones a los mensajes a los que un objeto puede responder representan el comportamiento, es decir, son los mtodos que dicho objeto puede realizar.

En nuestro ejemplo, el objeto automvil es capaz de realizar la accin de cambiar de marcha, pero necesita de otro objeto (por ejemplo, un objeto persona) que interacte con l, que le indique la accin a realizar (tambin podr frenar, acelerar, etc.), y adems necesitar recibir la marcha a la que deseamos cambiar.

Por tanto, para interactuar dos objetos se necesita enviar un mensaje que debe especificar: El objeto al que vamos a enviar el mensaje. El nombre del mtodo (accin o comportamiento que queremos que realice). Los parmetros necesarios para el mtodo en cuestin.

Objeto Nombre del mtodo Parmetros

El objeto automvil. Cambiar de marcha en nuestro automvil, etc. La marcha a la que deseamos cambiar.

Como ya hemos comentado anteriormente, los mtodos son las acciones que se pueden realizar con los objetos. No obstante, tambin podemos considerar un mtodo como la implementacin de un mensaje. Dentro de un objeto existen mtodos de uso interno (ocultos o privados), y mtodos pblicos, que constituyen la interfaz del objeto con el resto de objetos con quienes puede interaccionar. Cuando un objeto le enva un mensaje a otro, se produce la llamada o invocacin de un mtodo de dicho objeto. Por otra parte, los mtodos consultan o modifican el estado de un objeto. Son funciones dentro de un objeto y, como tales, pueden retornar un valor (informacin sobre el estado del objeto), o realizar una accin sobre el estado del mismo. 4.3. SOBRECARGA Se trata de otra de las tcnicas usadas en la POO que hace referencia a la posibilidad de tener en una misma clase mtodos con el mismo nombre pero que difieren en el tipo de los parmetros que reciben, en el nmero de ellos o bien en el tipo y nmero de parmetros.

Conceptos de la programacin orientada a objetos

Por ejemplo, podemos tener en la clase Matriz dos mtodos sumar(), uno de ellos recibira un entero para sumar a la matriz y el otro mtodo sumar(), podra recibir otro objeto matriz. El primer mtodo implementa la suma matemtica entre un entero y una matriz, y el segundo, la suma de matrices.

5. MODELO DE OBJETOS Y RELACIONES ENTRE CLASES Una vez definido e identificado el problema que deseamos solucionar en nuestra aplicacin, debemos realizar una representacin lgica de los objetos que forman parte del problema en el mundo real y utilizar en nuestro programa estos objetos computacionales (objetos dentro de nuestro cdigo), y las relaciones existentes entre dichos objetos, todo ello para que nuestra aplicacin funcione adecuadamente. Por tanto, debemos aplicar los principios de la POO que hemos introducido en los apartados anteriores: abstraccin, encapsulacin, herencia y polimorfismo. Cada clase en nuestra aplicacin estar especializada en una funcin o tarea especfica. No obstante, para ofrecer una mayor funcionalidad y realizar tareas ms complejas es necesario que exista una relacin entre distintas clases, es decir, una forma de interaccin o comunicacin entre ellas. As, una clase puede relacionarse con otra a travs de: Una relacin de composicin: una clase est compuesta de otras clases. Esto ocurre cuando los atributos de una clase se implementan como objetos de otra clase.

La clase automvil tiene atributos como son la clase puerta, motor, rueda, chasis, etc.

Una relacin de uso: una clase se relaciona con otra a travs de los mensajes que le enva, pasndole una instancia de una clase como parmetro del mtodo invocado por el mensaje.

Al invocar al mtodo suma de una matriz, le pasamos un objeto entero para que lo sume a un objeto matriz.

Una relacin de herencia: como ya adelantamos, consiste en que una clase hereda de una clase padre o superclase, obteniendo as toda la funcionalidad ofrecida por la clase padre y pudiendo aadir nuevas funcionalidades. Con esta forma de relacin conseguimos una mayor reutilizacin del cdigo y una mayor especializacin a travs de la jerarqua de clases. Las clases iniciales en esta jerarqua son ms generales y, a medida que profundizamos en la jerarqua de la descendencia, las clases hijas estn ms especializadas, implementan tareas ms concretas.

10

Conceptos de la programacin orientada a objetos


6. VENTAJAS E INCONVENIENTES DE LA POO Entre las ventajas que encontramos al utilizar POO tenemos que: Facilita la reutilizacin del software, como ya hemos comentado, a travs de la herencia. Adems, la encapsulacin nos facilita el uso de objetos que no hemos implementado todava, pero de los que conocemos qu hacen. Facilita el mantenimiento de los programas y la deteccin de errores. La encapsulacin nos garantiza que las modificaciones realizadas en el ncleo de un objeto tendrn un efecto limitado y localizado, y su interfaz de comunicacin con el resto de objetos se mantendr, por lo que podremos seguir comunicndonos con l de igual forma. Las tareas de anlisis, diseo e implementacin son ms intuitivas, ya que los objetos en nuestros diseos van a representar objetos presentes en el mundo real. Por otra parte, entre las desventajas que encontramos al utilizar POO tenemos que: La curva de aprendizaje suele ser ms larga que la necesaria en la programacin estructurada, debido principalmente a que implica un cambio de mentalidad adems de aprender un nuevo lenguaje orientado a objetos. Dificultad a la hora de determinar las caractersticas de un objeto ya que debemos tener en cuenta las relaciones con otros objetos. A veces, el establecimiento de nuevas relaciones puede implicar un cambio en la definicin del objeto. Jerarquas de herencia complejas, que pueden llegar a ser confusas en el caso de la herencia mltiple (una clase puede heredar de ms de una clase).

11

Conceptos de la programacin orientada a objetos


Los lenguajes de programacin orientados a objetos permiten el

recuerde_

encapsulamiento, la abstraccin, la herencia y el polimorfismo. El encapsulamiento separa la interfaz de la implementacin ocultando los datos dentro del objeto y permitiendo el acceso a los datos de dicho objeto a travs de funciones miembro (mtodos). Las subclases heredan las funciones miembro y las variables de sus clases padre, haciendo sencilla la reutilizacin de las funcionalidades de las clases padre. El polimorfismo permite crear cdigo genrico y reutilizable que podr funcionar con una amplia gama de clases diferentes.

12

Fundamentos de programacin en C#

ndice_
formacin digital

1. INTRODUCCIN ...............................................................................3 2. MI PRIMERA PGINA EN ASP.NET ....................................................4 3. SINTAXIS DE C#. DECLARACIN DE VARIABLES Y COMENTARIOS ....9 3.1. TIPOS PREDEFINIDOS ...........................................................10 3.2. TIPOS DEFINIDOS POR EL USUARIO ......................................11 3.3. DECLARACIN DE VARIABLES ................................................12 3.4. COMENTARIOS .......................................................................12 4. SENTENCIAS CONDICIONALES, BUCLES Y OPERADORES.................13 4.1. SENTENCIAS CONDICIONALES ...............................................13 4.2. BUCLES ..................................................................................14 4.3. OPERADORES .........................................................................16 5. DEFINICIN E INSTANCIACIN DE CLASES....................................18 5.1. DEFINICIN DE UNA CLASE ...................................................18 5.2. INSTANCIACIN DE UNA CLASE .............................................19 6. MANEJADORES DE EVENTOS...........................................................21 7. TRATAMIENTO DE ERRORES ...........................................................22 8. MODIFICADORES ...........................................................................23 8.1. MODIFICADORES DE ACCESO .................................................24 8.2. OTROS MODIFICADORES........................................................24

Fundamentos de programacin en C#
1. INTRODUCCIN En este captulo realizaremos un recorrido por los fundamentos de C#. Utilizaremos dicho lenguaje a lo largo del manual por ser un lenguaje de ltima generacin, pensado para los desarrolladores web y que se adapta mejor a los estndares de C++ y Java. Antes vamos a realizar una pgina ASP.NET que muestre el famoso mensaje Hola Mundo cuando pulsemos sobre el botn incluido en la pgina, ello nos servir para ir familiarizndonos con ASP.NET y el lenguaje. Convenciones tipogrficas para el cdigo fuente: A lo largo de este manual haremos uso de programas de ejemplo, escribiendo el cdigo fuente con una tipografa determinada por la naturaleza de cada palabra: En rojo oscuro y tipo de letra Courier:

Los nombres de los controles HTML y controles web (p.ej. <input o <asp:Label). Las directivas (p.ej. @ Page o @ Import). Las etiquetas HTML (p.ej. <html>, <head>, <body>, etc.). Cadenas de caracteres en C# (p.ej. etiqueta.Text=Fecha/Hora actuales).

En rojo claro y tipo de letra Courier:

Los atributos de las directivas (p.ej. @ Page Language).

Las propiedades de controles HTML y controles web (p.ej. <input type=button o <asp:Label id=etiqueta).

En azul oscuro y tipo de letra Courier:

Las palabras reservadas del lenguaje C# (p.ej. public, class, int, true).

El valor de las propiedades de controles HTML y controles Web (p.ej. <input type=button o <asp:Label id=etiqueta).

El valor de los atributos de las directivas (@ Page Language="C#")

Fundamentos de programacin en C#
En azul claro y tipo de letra Courier:

Los

nombres

de

las

clases

(p.ej.

DateTime

fecha

new

DateTime

estilo.BorderColor=Color.Green).

2. MI PRIMERA PGINA EN ASP.NET Vamos a realizar una prctica muy simple cuyo objetivo ser introducirnos en la creacin de un nuevo sitio web desde cero usando Visual Web Developer 2008 Express. Para ello, creamos un nuevo sitio web, le damos un nombre (p.ej. WebHolaMundo) y establecemos Visual C# como lenguaje:

Microsoft recomienda que para realizar la programacin dinmica se use el modelo codebehind, (cdigo por detrs o cdigo oculto). Esta tcnica de separacin de cdigo, muy utilizada en la plataforma ASP.NET, consiste en separar la interfaz de usuario de la lgica de la aplicacin. La lgica se encuentra en el archivo .cs (la definicin de la clase con sus mtodos y atributos) y la interfaz de usuario (la presentacin de la aplicacin) en el archivo .aspx.

Fundamentos de programacin en C#
Comenzaremos incluyendo un Label y un Button en la capa de presentacin

(holamundo.aspx). Encontraremos los controles mencionados en el cuadro de herramientas que tenemos a la izquierda, slo tendremos que arrastrarlos para insertarlos en nuestra pgina:

Nuestra primera pgina ASP.NET:

holamundo.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="holamundo.aspx.cs" Inherits="_Default" %> <html> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="etiqueta" runat="server" Text="" /> <asp:Button ID="Button1" runat="server" onclick="pulsado" Text="Plsame"/> </div> </form> </body> </html>

Fundamentos de programacin en C#
En el fichero holamundo.aspx.cs introducimos el siguiente cdigo

holamundo.aspx.cs using using using using System; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void pulsado(Object sender, EventArgs e) { etiqueta.Style["font-size"] = "XX-Large"; etiqueta.Text = "Hola Mundo!"; } }

Para poder visualizar esta pgina ASP.NET, debemos colocarlo en un directorio de publicacin en Internet (que adems posea el permiso de ejecucin de secuencias de comandos) y ejecutar la pgina a travs del servidor web (por ejemplo, escribiendo en nuestro navegador http://localhost/holamundo.aspx). Si no, el entorno de Visual Web Developer 2008 Express tambin nos permite visualizar la pgina en nuestro navegador. Para ello, usamos la opcin Ver en el Explorador como muestra la siguiente captura:

Fundamentos de programacin en C#
Al hacerlo, aparecer una pgina vaca que presenta nicamente un botn con el texto Plsame. Si hacemos clic sobre el botn, se mostrar el mensaje Hola Mundo! como podemos ver en la imagen:

Resultado de la ejecucin de nuestra pgina holamundo.aspx en el navegador.

Hemos de saber que: (<%@ %>) es un bloque de directivas que utiliza nuestro holamundo.aspx para inicializar una serie de variables de configuracin del sitio web. El atributo Inherits se emplea para indicar la clase que se est usando. El atributo CodeFile sirve para indicar el archivo que contiene el cdigo subyacente.

En el fichero holamundo.aspx nos encontramos con la definicin de un web form (formulario web), que ser el que va a contener la etiqueta y el botn. Podemos ver que las sintaxis es muy similar a la utilizada para definir un formulario tpico HTML, la diferencia est en la inclusin de la propiedad runat que posee el valor server, para indicar que se trata de un formulario de servidor.

Fundamentos de programacin en C#
Por otra parte, dentro del formulario se encuentran dos controles web que pertenecen a las clases Label y Button. Recordemos que estos dos controles web son los objetos que utilizaremos en nuestro cdigo, siendo cada uno de ellos una instancia de su clase correspondiente. El objeto Label representa a la etiqueta que mostrar el mensaje en la pgina. El objeto Button es el botn que invocar al mtodo pulsado() cuando el usuario haga clic sobre l. Estos dos controles tienen un atributo id, que es el nombre a travs del cual podremos acceder a sus propiedades. As, en el mtodo pulsado utilizamos el identificador etiqueta para acceder al objeto Label y modificar su propiedad Text, que inicialmente no tena valor. El control Button posee la propiedad onclick, en la que podemos indicar el mtodo responsable de tratar el evento de pulsacin. Mediante los web forms de ASP.NET, tenemos acceso a todos los controles, ya que forman parte de la pgina y se comportan como propiedades de la misma. En holamundo.aspx.cs tenemos el mtodo void pulsado(object sender, EventArgs e), que se ejecutar cuando el usuario pulse el botn que pertenece al web form. Este mtodo trata el evento de pulsacin del botn (onclick=pulsado en la definicin del control <asp:button> del fichero holamundo.aspx). Este mtodo no devuelve ningn valor (void) y recibe dos parmetros que ofrecen informacin acerca del evento que se ha producido (aunque en este ejemplo no usamos dichos parmetros porque no es necesario para mostrar nuestro mensaje). Dentro del mtodo accedemos al estilo de la etiqueta definida (<asp:label id=etiqueta>), para darle un tamao determinado y, a continuacin, establecemos el valor de la propiedad Text de la etiqueta con el mensaje Hola Mundo!. Por ltimo, podemos observar que el delimitador de sentencias en C# es el punto y coma (;), y el de bloques de cdigo las llaves ({}).

Fundamentos de programacin en C#
3. SINTAXIS DE C#. DECLARACIN DE VARIABLES Y COMENTARIOS El lenguaje C# presenta una serie de palabras bsicas reservadas para el propio lenguaje. Por este motivo, no podremos usarlas en nuestros nombres de clases, variables, propiedades, funciones o mtodos. 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

Por otra parte, C# se asimila bastante a lenguajes como C++ o Java. Distingue entre maysculas y minsculas. Por lo tanto, debemos tener cuidado al escribir nuestro cdigo. Por ejemplo, si queremos declarar una variable de tipo long, debemos escribir long y no Long o LONG (para el compilador del lenguaje estas tres palabras son distintas). Asimismo, por convencin: Los nombres de mtodos y las clases tienen la primera letra de cada una de sus partes en maysculas. As, por ejemplo, tenemos la clase DropDownList. Los tipos simples del lenguaje C# se escriben con todas sus letras en minsculas. Todas las instrucciones en C# acaban con un punto y coma ;.

Fundamentos de programacin en C#
El separador de bloques de cdigo, como ya hemos mencionado, son las llaves ({}).

3.1. TIPOS PREDEFINIDOS C# provee de 15 tipos predefinidos, los cuales se muestran en la figura de abajo y en una lista detallada seguidamente. Del total, 13 son tipos simples y 2 no simples. Los nombres de todos los tipos predefinidos lo constituyen letras en minsculas. Los tipos predefinidos simples incluyen 11 tipos numricos: Ocho tipos enteros con distintas longitudes, con signo y sin signo. Tipos de punto flotante -float y double-. Decimales de alta precisin llamados decimal. A diferencia de los tipos float y double, el tipo decimal puede representar nmeros fraccionarios decimales exactos. Se usa frecuentemente para clculos monetarios. Los tipos predefinidos simples no numricos son: Un tipo carcter, llamado char. Un tipo bool que representa valores booleanos y toman como valor true o false.

Por otra parte, los dos tipos no simples son los siguientes: El tipo string, que es un array (vector o matriz) de caracteres. El tipo object, que es el tipo en el cual est basado el resto de los tipos.

10

Fundamentos de programacin en C#

Tipos predefinidos

Simple

object

string

No numricos bool char

Numrico

Entero

Punto flotante

decimal

float

double

8-Bit sbyte byte

16-Bit short ushort

32-Bit int uint

64-Bit long ulong

3.2. TIPOS DEFINIDOS POR EL USUARIO Adems de los 15 tipos predefinidos de los que nos provee C#, tambin podemos crear nuestros propios tipos. Hay una variedad de tipos que podemos crear. Son los siguientes: Tipo class. Tipo struct. Tipo enum. Tipo delegate. Tipo interface.

Por otra parte, los tipos son creados usando una declaracin de tipo en la que se incluye la siguiente informacin: La variedad del tipo que estamos creando. El nombre del nuevo tipo. Una declaracin (nombre y especificacin) de cada uno de los miembros del tipo excepto para los tipos array y delegate, los cuales no tienen un nombre miembro-.

11

Fundamentos de programacin en C#
Por ltimo, una vez hemos declarado un tipo, podemos crear y usar objetos del tipo como si fueran tipos predefinidos (como un entero o un carcter). 3.3. DECLARACIN DE VARIABLES Para declarar una variable (tanto si es una referencia a un objeto o a un tipo simple), primero indicamos el tipo de la variable, es decir, el tipo simple o clase, y a continuacin el nombre de la variable. No obstante, si la variable posee algn modificador de acceso (como private o public) o de otro tipo, este modificador debe aparecer antes del tipo de la variable (veremos los modificadores al final del captulo). Ejemplo:

string cadena; int num_aleatorio; public DateTime fechaActual;

3.4. COMENTARIOS Podemos utilizar comentarios de lnea simple o de un grupo de lneas:

// Cdigo comentado de lnea simple /* Cdigo comentado que ocupa varias lneas. Siguiente lnea de comentario. El cdigo comentado no se ejecutar.

*/

Esto resulta til para despus entender mejor el cdigo. Si trabajamos en grupo nos ser ms accesible y entendible el cdigo que tenga comentarios aclaratorios. Tambin nos ayudar en el caso en que tengamos que abordar un cdigo que escribimos nosotros mismos y que hemos olvidado con el tiempo. Por lo tanto, es una prctica casi obligatoria, adems de una buena costumbre, aclarar el cdigo que escribamos con comentarios.

12

Fundamentos de programacin en C#
4. SENTENCIAS CONDICIONALES, BUCLES Y OPERADORES 4.1. SENTENCIAS CONDICIONALES Condicional if else. Su sintaxis es la siguiente (la inclusin de la sentencia else es opcional, por eso va entre corchetes):

if (expresin) { //cdigo para expresin "verdadera"; }[else { //cdigo para expresin "falsa"; }] //Veamos un ejemplo de su uso: protected void pulsado(Object sender, EventArgs e) { if (etiqueta1.Text.Equals(etiqueta2.Text)) { Response.Write("Las etiquetas son iguales"); } else { Response.Write("Las etiquetas no son iguales"); } } Condicional mltiple switch

switch (expresin) { case expresin_constante1: //cdigo break; case expresin_constante2: //cdigo break; ... default: //cdigo break; }

13

Fundamentos de programacin en C#
Veamos un ejemplo de su uso:

protected void pulsado(Object sender, EventArgs e) { string respuesta = TextBox1.Text; switch (respuesta) { case "1": Response.Write ("Ha elegido la respuesta 1"); break; case "2": Response.Write ("Ha elegido la respuesta 2"); break; case "3": Response.Write ("Ha elegido la respuesta 3"); break; default: Response.Write ("Debe elegir una de estas respuestas: 1, 2, 3"); break; } }

4.2. BUCLES Estos bucles se utilizan cuando queremos repetir la ejecucin de unas sentencias un nmero indefinido de veces, siempre que se cumpla una condicin. Bucle while. En este bucle se evala primero la condicin y si se cumple, se repetir la ejecucin hasta que la condicin deje de hacerlo.

while (expresin) { //cdigo } //Ejemplo de su uso: protected void pulsado(Object sender, EventArgs e) { int contador= 0; while(contador <= 10) { Response.Write ( contador + "<br>"); contador++; } }

Bucle do while. Se utiliza generalmente cuando no sabemos cuantas veces se habr de ejecutar el bucle, igual que el bucle while, con la diferencia de que sabemos seguro que el bucle por lo menos se ejecutar una vez ya que la condicin se evala al final.

14

Fundamentos de programacin en C#

do{ //cdigo }while (expresin);

Ejemplo de su uso:

protected void pulsado(Object sender, EventArgs e) { int contador = 7; do{ Response.Write ("Quedan " + contador + "segundos para el final<br>"); System.Threading.Thread.Sleep(1000); contador = contador - 1; } while (contador > 0); }

Bucle for. Es un bucle que permite ejecutar un conjunto de sentencias un nmero determinado de veces. Para ello, se fija el valor inicial al principio del mismo y, a continuacin, la condicin que debe cumplir. Se ha de definir tambin el incremento que ir tomando la variable del bucle, la cual puede ser utilizada en las funciones que incorpora. Su expresin general sera como la que sigue:

for (inicializacin; expresion; incremento) { // cdigo; }

Ejemplo de uso:

private void Pulsado(object sender, EventArgs e) { for (int contador = 7; contador >0; contador--) { Response.Write("Quedan " + contador + "segundos para el final<br>"); System.Threading.Thread.Sleep(1000); } }

Bucle foreach in. Este bucle suele utilizarse para recorrer los elementos de un array o de una coleccin y, por tanto, la expresin en este bucle ser el nombre de un array o coleccin.

15

Fundamentos de programacin en C#

foreach(tipo identificador in expresin) { //cdigo }

Ejemplo de su uso:

protected void pulsado(object sender, EventArgs e) { string [] colores={"rojo","azul","negro","naranja","blanco"}; foreach(string color in colores) { Response.Write ( color + "<br>"); } }

4.3. OPERADORES En C#, un operador es un trmino o un smbolo que acepta como entrada una o ms expresiones, denominadas operandos, y devuelve un valor, es decir, es un smbolo formado por uno o ms caracteres que permite realizar una determinada operacin entre uno o ms datos y produce un resultado. En este apartado veremos los principales operadores del lenguaje C#, algunos de los cuales ya hemos usado en los ejemplos anteriores para formar sentencias o expresiones condicionales. Operadores aritmticos:

+ * / % ++ --

Suma. Resta. Multiplicacin. Divisin. Mdulo (resto de la divisin). Operador de incremento. Operador de decremento.

16

Fundamentos de programacin en C#
Operadores lgicos:

& | ^ ! && || true false

AND: Devuelve true si las dos expresiones son verdaderas. OR: Devuelve true si una de las dos expresiones es verdadera. XOR: Devuelve true si slo una de las expresiones es verdadera. NOT: Cambia una expresin de verdadera a falsa y viceversa. Similar a & pero, en el caso de que no se cumpla alguna expresin, el resto de las comparaciones (tomndolas de izquierda a derecha) no se evaluarn y devolver false. Similar a |, pero en el caso de que se cumpla alguna expresin, el resto de las comparaciones (tomndolas de izquierda a derecha) no se evaluarn y devolver true. Literal y operador que devuelve el valor booleano de verdadero. Literal y operador que devuelve el valor booleano de falso.

Operadores de asignacin: se utilizan para asignar un valor nuevo a una variable o propiedad. Hay que tener en cuenta que utilizar operadores compuestos en expresiones como contador+=1 es equivalente a contador=contador+1.

= ^= *= /= += -= &= %=

Operador bsico de asignacin. Operador de potencia. Operador de multiplicacin. Operador de divisin. Operador de suma. Operador de resta. Operador de concatenacin de cadenas. Operador de mdulo.

Operadores de comparacin:

== != > < >= <=

Igual que. Distinto que. Mayor que. Menor que. Mayor o igual que. Menor o igual que.

Operadores de concatenacin. Este operador sirve para unir dos cadenas de texto (tipo string) en una sola, y es el operador ms (+).

17

Fundamentos de programacin en C#
Otros operadores:

. [] ?: is sizeof typeof

Acceso a miembros de objetos (propiedades y mtodos). Operador de ndice, para acceder a los distintos elementos de un array. Realiza una operacin condicional en una sola lnea. Su formato es: expresin? Caso-siverdadero: caso-si-falso Se utiliza para ver si un objeto es de un determinado tipo (o es compatible con dicho tipo debido a la herencia). Devuelve el tamao en bytes de un tipo de datos. Devuelve el tipo de un objeto.

5. DEFINICIN E INSTANCIACIN DE CLASES 5.1. DEFINICIN DE UNA CLASE La sintaxis general para declarar una clase en C# es:

using Namespace; namespace NombreDeEspacio { modificadores class NombreDeClase : ClasePadre { //implementacin de la clase } }

Un namespace es una forma de clasificar y organizar clases para evitar conflictos de nombres (podemos tener clases con igual nombre en distintos namespaces). Cada namespace contiene un conjunto de clases relacionadas (como una librera). Incluiremos una sentencia using por cada uno de los espacios con nombre (namespace) que necesitemos. Asimismo, podemos definir nuestra clase dentro de un namespace. Para ello, utilizaremos la palabra clave namespace seguida del nombre que le damos a nuestro espacio con nombre. Por otra parte, entre las llaves del namespace incluimos la declaracin de la clase en la cual aparecen: los modificadores de la clase estamos definiendo.
1

(que sirven para definir las caractersticas de

dicha clase), la palabra reservada class y el nombre que hemos elegido para la clase que

En el siguiente apartado estudiaremos los modificadores con ms profundidad.

18

Fundamentos de programacin en C#
Si nuestra clase hereda de una clase padre (superclase), lo indicaremos poniendo los dos puntos (:) y a continuacin, el nombre de la clase de la que heredamos. Despus, entre las dos llaves escribimos la implementacin de la clase, donde definimos sus propiedades y mtodos. 5.2. INSTANCIACIN DE UNA CLASE Para crear una nueva instancia de una clase (nuestra o de las proporcionadas por el entorno), utilizamos el operador new. Este operador informa al sistema de que queremos crear un nuevo objeto y asignarlo a un nombre de objeto que elegimos. Cuando se utiliza este operador, el sistema llama automticamente al constructor de la clase, donde se inicializan las propiedades de la actual instancia (objeto) que estamos creando. Su sintaxis es la siguiente:

Clase nombre_objeto = new Clase();

El operador new se utiliza para crear nuevos objetos, no para tipos bsicos como int, long, bool, char, etc. Para estos ltimos es suficiente una declaracin indicando el tipo de la variable, seguido del nombre dado a la variable, por ejemplo:

int numero; string cadena= "Hola mundo";

Por otra parte, el CLR de Microsoft .NET cuenta con un recolector de basura que se encarga de liberar automticamente todos los objetos creados mediante el operador new cuando detecta que el objeto deja de ser utilizado. Veamos un ejemplo de clases. Por un lado, el archivo Vehiculo.cs que contiene una clase denominada Vehiculo, dentro del espacio de nombres aplicacionWeb y, por otro lado, las pginas ASP.NET pagina.aspx y pagina.aspx.cs.

Vehiculo.cs using System; namespace aplicacionWeb { public class Vehiculo { private int n_puertas = 0; private string marca = ; public Vehiculo (int num_puertas, string nombre_marca)

19

Fundamentos de programacin en C#

{ n_puertas = num_puertas; marca = nombre_marca; } public string getMarca() { return marca; } public int getNumeroPuertas() { return n_puertas; } } } pagina.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="pagina.aspx.cs" Inherits="_Default" %> <html> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="btnMostrar" runat="server" onclick="mostrar" Text="Mostrar Vehculo" /> </div> </form> </body> </html>

pagina.aspx.cs using System; using aplicacionWeb; public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void mostrar(Object sender, EventArgs e) { Vehiculo coche1 = new Vehiculo(5, "Renault"); Response.Write(coche1.getMarca() + "<br>"); Response.Write("El nmero de puertas es: " + coche1.getNumeroPuertas() + "<br>"); } }

20

Fundamentos de programacin en C#
Cuando aadimos una clase nueva al proyecto, Visual Web Developer 2008 Express nos preguntar si queremos guardar el fichero en la carpeta App_Code: Si decimos que s no har falta usar la directiva Assembly puesto que el cdigo fuente se compilar automticamente. La carpeta ser creada automticamente por Visual Studio o Visual Web Developer 2008 Express en el caso de no haber sido creada por el usuario. Por otra parte, hemos insertado un objeto Button cuyo evento onclick ser el desencadenante de la llamada al mtodo mostrar() del fichero pagina.aspx.cs. En este mtodo creamos una nueva instancia de la clase Vehiculo mediante el operador new. Lo inicializamos con 5 puertas y marca Renault (valor para sus propiedades), y una vez que ya tenemos creado nuestro objeto, podemos acceder a sus mtodos miembro disponibles (getMarca() y getNumeroPuertas()). Por ltimo, en la cabecera del fichero pagina.aspx.cs importamos el namespace

aplicacionesWeb con using, para poder hacer referencia a la clase Vehiculo que est contenida en el espacio de nombres mencionado.

6. MANEJADORES DE EVENTOS Se trata de mtodos especiales que se encargan del tratamiento de eventos en el cliente (por ejemplo, pulsar un botn o cambiar la opcin de un desplegable), pero que ejecutan cdigo de servidor. Estos mtodos para el tratamiento de eventos poseen parmetros (recordemos el mtodo pulsado de nuestra primera pgina ASP.NET, que mostraba el mensaje Hola mundo al hacer clic sobre el botn plsame, al comienzo de este captulo): El control que gener el evento (en dicho ejemplo, el botn plsame). Los argumentos adicionales que necesite el mtodo y que normalmente dependern del tipo de evento a tratar.

21

Fundamentos de programacin en C#
La sintaxis general de un mtodo para el tratamiento de eventos es la siguiente:

void NombreMtodo(Object origen, EventArgs argumentos) { //cdigo de tratamiento del evento }

7. TRATAMIENTO DE ERRORES C# dispone de una serie de sentencias y mecanismos orientados a capturar los errores o situaciones anmalas que puedan ocurrir dentro de nuestros programas, para poder tratarlos de forma adecuada. Este tratamiento se conoce como gestin estructurada de excepciones, que manejamos con las siguientes palabras reservadas: try. Con esta palabra clave definimos la zona de nuestro cdigo que va a ser inspeccionada y tratada bajo la gestin estructurada de excepciones. catch. Con ella definimos el cdigo que debe ejecutarse cuando se produce la excepcin o situacin anmala. Podemos tener mltiples catch para un solo try, ejecutndose aquel catch que tenga el tipo de excepcin u error que se haya producido en la zona del try para esa ejecucin. finally. Define el cdigo que se ejecutar siempre despus de llevarse a cabo el cdigo dentro de una sentencia try, es decir, el cdigo que pongamos en este bloque se ejecutar siempre, independientemente de si se ha producido o no una excepcin. throw. Esta sentencia se utiliza para lanzar2 una excepcin. Debe ir seguida de un objeto que representa la excepcin que se ha producido (debe ser un objeto que hereda de la clase System.Exception).

Lanzar la excepcin significa que dicho error puede propagarse y ser tratado en otro punto de la secuencia de llamadas a mtodos.

22

Fundamentos de programacin en C#
La sintaxis de un bloque try-catch-finally es la siguiente:

try { //cdigo a inspeccionar }catch (tipo de excepcin variable) { //tratamiento de esta excepcin }catch (tipo de excepcin variable) { //tratamiento de esta excepcin } [ ... ] finally { //cdigo que siempre se ejecutar, se produzca o no una excepcin en el //bloque try }

Veamos un ejemplo. En el siguiente cdigo se intenta realizar una operacin matemtica de divisin de un nmero por cero, lo que dentro del entorno de ejecucin causar una excepcin del tipo System.DivideByZeroException, que deriva directamente de la clase System.Exception, y que nos encargaremos de capturar de forma adecuada mediante una sentencia catch para presentar al usuario un mensaje de error controlado.

protected void pulsado(Object sender, EventArgs e) { int numero1 = 50; int numero2 = 0; int resultado; try { resultado = numero1 / numero2; }catch(System.DivideByZeroException error){ Response.Write("Se ha producido un error. No se puede dividir por cero. Excepcion: " + error.Message); } }

8. MODIFICADORES Los modificadores son palabras clave cuya funcin es especificar el mbito o cualidades de nuestras clases, objetos, variables o mtodos.

23

Fundamentos de programacin en C#
8.1. MODIFICADORES DE ACCESO Estos modificadores se encargan de especificar el nivel de accesibilidad de los miembros de las clases (propiedades y mtodos). Disponemos de los siguientes: public. Informa al entorno de que la propiedad o mtodo es accesible desde cualquier clase o parte del programa. Este modificador otorga el mximo nivel de accesibilidad. private. Con este modificador informamos al sistema de que la propiedad o mtodo nicamente es accesible desde los mtodos internos de la misma clase (es decir, slo podemos acceder a un miembro private desde la propia clase, no desde otras clases, ni siquiera desde las subclases que hereden de la clase que contiene los miembros private). protected. Los miembros protected son accesibles desde la propia clase donde se encuentran, y desde las clases derivadas de ella. internal. Los miembros que llevan este modificador slo son accesibles desde los archivos del mismo proyecto. 8.2. OTROS MODIFICADORES El lenguaje C# dispone de otra serie de modificadores, aplicables a clases o miembros de clase: abstract. Las clases abstractas son aquellas que no tienen la implementacin de todos sus mtodos, sino que contienen algn mtodo no implementado. Las clases abstractas no pueden ser instanciadas directamente (mediante el operador new), sino que sirven como clases base a otras clases, donde se proporcionar la implementacin de esos mtodos no definidos. const. Este modificador indica que la propiedad de clase o variable es una constante, es decir, tiene carcter de slo lectura y su valor no puede modificarse. extern. Este modificador se aplica a un mtodo e indica que la implementacin de dicho mtodo es realizada de forma externa, mediante la inclusin de alguna librera externa a .NET Framework.

24

Fundamentos de programacin en C#
readonly. Este modificador marca a una propiedad como de slo lectura pero puede inicializarse dentro de un constructor de dicha clase. sealed. Es aplicable exclusivamente a las clases y significa que no se pueden heredar. static. Este modificador indica que la propiedad o mtodo de una clase pertenece al propio tipo o clase, es decir, el elemento static no se crea por cada instancia de la clase. Podemos acceder a los miembros estticos a travs de su clase, sin tener que crear un nuevo objeto de esa clase. virtual. Este modificador marca a un mtodo para que las clases derivadas puedan implementarlo. override. Se utiliza para generar una nueva implementacin de una funcin virtual de una clase. Aparece en las clases derivadas de una clase base (abstracta) para implementar funcionalidad especfica a dichas clases derivadas.

25

Fundamentos de programacin en C#

recuerde_

C# es uno de los lenguajes ms utilizados en la plataforma .NET. Se caracteriza por: Es un lenguaje orientado a objetos que permite aplicar los mecanismos propios de la POO, como derivacin, abstraccin o encapsulamiento. Su sintaxis es bastante similar a C++ o Java. Distingue entre maysculas y minsculas. Cuenta con las estructuras tpicas (sentencias condicionales, bucles, operadores, modificadores, etc.). Permite una gestin estructurada de excepciones con la que controlar los errores o las situaciones anmalas que puedan ocurrir durante la ejecucin de nuestra aplicacin. Permite separar la interfaz de usuario de la lgica de la aplicacin (tcnica Code-Behind).

26

Conceptos de web form

ndice_
1. CONCEPTOS DE WEB FORMS.............................................................3 2. LA CLASE PAGE ................................................................................3 2.1. EVENTOS DE LA PGINA ..........................................................3 2.2. PROPIEDADES DE LA CLASE PAGE ............................................6 2.3. MTODOS DE LA CLASE PAGE ...................................................8 3. WEB FORMS ...................................................................................10 4. INTRODUCCIN A LOS CONTROLES DE SERVIDOR DE ASP.NET.......11 5. INTRODUCCIN A LOS CONTROLES HTML.......................................12 5.1. EJEMPLOS CON CONTROLES HTML..........................................15 6. INTRODUCCIN A LOS CONTROLES WEB ........................................20 6.1. EJEMPLOS CON CONTROLES WEB ........................................... 24

formacin digital

Conceptos de web form


1. CONCEPTOS DE WEB FORMS En este captulo veremos una introduccin a los controles web que pueden utilizarse en un web form (formulario ASP.NET). Como estos controles los incluiremos en una pgina ASP.NET, vamos a estudiar antes la clase Page, ya que podemos representar a la pgina ASP.NET actual como un objeto de esta clase.

2. LA CLASE PAGE Cada vez que pedimos una pgina ASP.NET a un servidor web, es decir, cada vez que un cliente a travs de un navegador web solicita una URL que indica un fichero .ASPX en el servidor, se crea una serie de componentes que constituyen la pgina solicitada y que se compilan en una unidad. Estos componentes pueden ser: el fichero .ASPX solicitado, los controles de la pgina, las clases que contiene el cdigo de la pgina, etc. Los distintos componentes compilados dan lugar a un objeto de la clase

Object.Control.TemplateControl.Page. Esta clase se crea de forma dinmica. Adems, se crear una instancia cada vez que se realice una peticin del fichero .ASPX. Dentro del cdigo de una pgina siempre vamos a tener acceso a la clase Page, pues podemos decir que el objeto instancia de esta clase Page representa a la pgina ASP.NET actual. Este objeto nos sirve como contenedor de todos los componentes que constituyen la pgina y nos permite acceder a sus propiedades, mtodos y eventos. A continuacin, vamos a comentar los principales eventos, propiedades y mtodos que nos ofrece la clase Page: 2.1. EVENTOS DE LA PGINA Cuando se solicita una pgina ASP.NET, se desencadena una serie de eventos de pgina. Estos eventos siempre ocurren en el mismo orden, denominado ciclo de vida de los eventos de pgina. Los eventos de pgina se producen en el siguiente orden a lo largo del ciclo de vida de la pgina: Init: este evento es lanzado cuando la pgina es inicializada. En ese momento, todava no se han creado por completo los distintos controles de la pgina. Este evento es tratado en el mtodo Page_Init.

Conceptos de web form


Load: se lanza a continuacin del mtodo Init y tiene lugar cuando la pgina se ha cargado. En este momento, todos los controles de la pgina ya han sido creados. Este evento se lanzar cada vez que la pgina es ejecutada y lo tratamos en el mtodo Page_Load. PreRender: tiene lugar justo antes de enviar la informacin al cliente. Siempre es lanzado despus del evento Load. Lo tratamos en el mtodo Page_PreRender. UnLoad: se lanzar el ltimo, despus de haber tenido lugar todos los anteriores. En este momento, la pgina ha terminado de procesarse, se ha finalizado su ejecucin y toda la informacin ha sido enviada al cliente. Este evento lo tratamos en el mtodo Page_UnLoad. Veamos un sencillo ejemplo de uso de estos mtodos:

ejemploEventos.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ejemploEventos.aspx.cs" Inherits="_Default" <html> <head id="Head1" runat="server"> <title>Ejemplo de ejecucin de los eventos en una pgina ASP.NET</title> </head> <body> <form id="form1" runat="server" visible="True"> <asp:Label ID="Label1" runat="server">Eventos de la pgina</asp:Label> </form> </body> </html> %>

Conceptos de web form


ejemploEventos.aspx.cs using System; using aplicacionWeb; public partial class _Default : System.Web.UI.Page { protected void Page_Init(Object sender, EventArgs e) { Page.Response.Write("Este texto se escribe cuando se lanza el Evento Init <br>"); } protected void Page_Load(Object sender, EventArgs e) { Page.Response.Write("Este texto se escribe cuando se lanza el Evento Load <br>"); } protected void Page_PreRender(Object origen, EventArgs args) { Page.Response.Write("Este texto se escribe cuando se lanza el Evento PreRender <br>"); } }

La directiva using se utiliza para permitir el uso de tipos en un espacio de nombres, de modo que no sea necesario especificar en la declaracin el namespace del que proviene, como por ejemplo: aplicacionesWeb.vehiculo = new aplicacionesWeb.vehiculo(5, "Renault"). De esta forma, si en el ejemplo anterior tenemos declarado el namespace con la directiva using, podramos escribirlo as: vehiculo = new.vehiculo(5, "Renault"). Al ejecutar este ejemplo veremos una serie de mensajes que ilustran el orden de ejecucin de los distintos eventos que tratamos: (ver pgina siguiente).

Conceptos de web form

2.2. 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, por ejemplo:

Page.Response.Write("Hola Mundo"); //es equivalente a: Response.Write("Hola Mundo");

Las propiedades principales de la clase Page son: Application: esta propiedad es una referencia a un objeto de la clase

System.Web.HttpApplicationState. Nos permite almacenar y acceder a informacin compartida y comn a toda la aplicacin web. ClientTarget: es un objeto de la clase String. Nos permite sobrescribir la deteccin automtica de navegador web ofrecida por ASP.NET.

Conceptos de web form


EnableViewState: propiedad de tipo Boolean que nos permite desactivar el

mantenimiento del estado entre distintas llamadas de los controles web de la pgina. Por defecto, su valor es true. IsPostBack: propiedad de tipo Bolean que devuelve true si la pgina actual ya ha sido enviada al servidor en alguna ocasin. Si tiene el valor false significa que es la primera vez que se carga la pgina. Este indicador nos servir para inicializar los controles web y propiedades de la pgina. Request: esta propiedad es una referencia a un objeto de la clase

System.Web.HttpRequest. Esta propiedad nos permite acceder a toda la informacin necesaria de la peticin del protocolo HTTP que ha sido utilizada para solicitar la pgina del servidor web. Cuando esto ocurre, se genera un objeto HttpRequest para tratar con toda la informacin enviada. De este modo, Request representa la peticin de un cliente. Request.UserHostAddress obtiene la ip del host del cliente remoto. Response: esta propiedad es una referencia a un objeto de la clase System.Web. Nos permite manipular la respuesta devuelta al cliente que ha realizado la peticin de la pgina, es decir, este objeto representa la respuesta HTTP que se enva al cliente. Server: este atributo es una referencia a un objeto de la clase System.Web. Entre sus principales funcionalidades est la creacin de componentes existentes en el servidor. En ASP.NET los objetos se crean de distinta manera, importamos el espacio de nombres necesario (para tener acceso a todas sus clases) y a travs del operador new creamos nuevas instancias de objetos. Session: esta propiedad es una referencia a un objeto de la clase

System.Web.SessionState.HttpSessionState. Nos permite almacenar informacin entre diferentes pginas incluidas en una misma aplicacin ASP.NET para cada usuario. User: esta propiedad devuelve informacin sobre el usuario que ha solicitado la pgina ASP.NET.

Conceptos de web form


2.3. MTODOS DE LA CLASE PAGE En este apartado ofrecemos una descripcin de algunos de los mtodos que nos ofrece la clase Page: FindControl: este mtodo realiza una bsqueda en la pgina de un control web, cuyo nombre se le pasa como argumento y lo devuelve (si lo encuentra). El parmetro que recibe es un objeto de la clase String que representa el nombre del control buscado y el objeto devuelto corresponde a la clase Control. Sobre este objeto debemos aplicar el casting al control web esperado para poder acceder a sus miembros. MapPath: Devuelve un objeto de la clase String que representa una ruta virtual construida a partir de la ruta fsica que se le pasa como parmetro, que tambin es un objeto de la clase String. ResolveUrl: mtodo que convierte una URL virtual que se le pasa como parmetro en una URL absoluta. A continuacin, veremos un ejemplo con el que aprenderemos ms sobre las propiedades y los mtodos de la clase Page: En ocasiones, es muy til conseguir que se ejecute algo slo cuando se carga la pgina por primera vez o todo lo contrario, que se ejecute slo a partir de la primera carga. Esto se consigue con Page.IsPostBack. De esta manera, queremos que nos aparezca la fecha y hora de la primera vez en que se carga la pgina y que sta se mantenga aunque la pgina vaya y vuelva del servidor. Esto lo realizar cuando por ejemplo pulsemos un botn.

EjemploPage.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo9.aspx.cs" Inherits="_Default" %>

<html> <head id="Head1" runat="server"> <title>Ejemplo de ejecucin de los eventos en una pgina ASP.NET</title>

Conceptos de web form


</head> <body> <form id="form1" runat="server" visible="True"> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button1" /> <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button2" /> <br /> <asp:Label ID="Label1" runat="server"></asp:Label> </form> </body> </html>

EjemploPage.aspx.cs

using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { if (!Page.IsPostBack) { Label1.Text = DateTime.Now.ToString(); } } protected void Button1_Click(object sender, EventArgs e) { Page.Response.Write("Has pulsado el botn 1 <br>"); } protected void Button2_Click(object sender, EventArgs e) { Page.Response.Write("Has pulsado el botn 2 <br>"); Page.Response.Write("La direccin IP del host del cliente es: " +Page.Request.UserHostAddress); } }

Conceptos de web form


Como se observa, cuando se cargue la pgina (Page_Load), si es falso que la pgina haya sido recargada (es decir, que es la primera vez que se carga), el texto de Label1 ser la fecha y hora actual. Adems, comprobamos que si presionamos sobre alguno de los botones, la pgina va y vuelve del servidor, pero la fecha y hora sigue siendo la misma.

3. WEB FORMS Los web forms (formularios web) son una caracterstica de ASP.NET que ofrece un nuevo modelo de programacin y nos va a permitir generar contenidos dinmicos de una forma ms sencilla. Los web forms sustituyen a los formularios HTML dentro del entorno de programacin de ASP.NET. Es un web form el que va a generar el cdigo HTML correspondiente al formulario que estamos diseando. Asimismo, permiten el tratamiento de los eventos del cliente con cdigo ASP.NET, es decir, con cdigo que ser ejecutado en el servidor web. Este modelo de programacin ofrece algunas ventajas: Ofrece un modelo de programacin ms visual (en el entorno Visual Studio .NET podemos usar los distintos controles que nos suministran distintas paletas y arrastrarlos y soltarlos hasta la vista de diseo). Se ahorra tiempo de desarrollo en crear la interfaz de usuario y adems podemos reutilizar estos controles que encapsulan su funcionalidad. El cdigo resultante es ms limpio en la pgina, ya que no aparece mezclado con cdigo HTML como ocurra en las versiones anteriores de ASP (donde lo habitual es mezclar cdigo HTML con cdigo ASP). ASP.NET ofrece una mayor separacin entre la lgica de la aplicacin y la presentacin de la misma. Integra el tratamiento de eventos del cliente con el cdigo correspondiente en el servidor. Lleva a cabo el mantenimiento del estado del formulario de forma automtica entre peticiones. Esto significa que, si seleccionamos una serie de valores en el web form, al enviarlo, de forma automtica se van a mantener estos valores en el caso de que se vuelva a recargar el formulario.

10

Conceptos de web form


Para crear un formulario web nicamente debemos utilizar una etiqueta <form>, al estilo de las etiquetas del lenguaje HTML e incluir la propiedad runat con el valor server. Por ejemplo:

<form id=MiWebForm method=post runat=server> </form>

Dentro del formulario web colocaremos los distintos controles de servidor de ASP.NET que necesitemos para recoger la informacin correspondiente. Estos controles van a realizar las mismas funciones que los tpicos controles del lenguaje HTML que constituan los campos de un formulario.

4. INTRODUCCIN A LOS CONTROLES DE SERVIDOR DE ASP.NET Los controles ASP.NET son una serie de objetos de servidor que generarn el

correspondiente cdigo HTML para que el usuario pueda visualizarlos y utilizarlos en la pgina cargada en su navegador. Estos controles se encargan de manejar los eventos generados por el cliente (como la pulsacin de un botn, seleccin de una opcin en un desplegable, etc.). Cada control de servidor se corresponde con una clase determinada perteneciente a un espacio de nombres especfico. Existe un gran nmero de controles de servidor y cada uno de ellos pertenece a una clase del paquete .NET Framework. Podemos realizar la siguiente clasificacin: Controles HTML: representan controles puramente HTML. Son los que este lenguaje define para su uso en formularios. Controles Web: son otros componentes que ASP.NET trae preconfigurados y que implementan elementos ms complejos. Controles de lista: son utilizados para distribuir y mostrar datos en una pgina. Controles avanzados: cada vez se desarrollan ms controles de este tipo, que ofrecen funcionalidades avanzadas, como controles para rotar anuncios en nuestras pginas o para simular un calendario completo.

11

Conceptos de web form


Cuando utilizamos Visual Studio .NET para disear nuestras pginas web, podemos utilizar dos formas distintas de definir el posicionamiento de nuestros controles: GridLayout: permite un posicionamiento dinmico de los elementos mediante

coordenadas X e Y. Se realiza gracias a la integracin en los navegadores de las hojas de estilo en cascada y su posicionamiento dinmico de elementos HTML. FlowLayout: este sistema utiliza el mtodo tradicional de HTML de posicionamiento mediante prrafos y tablas, colocando los elementos de forma secuencial.

5. INTRODUCCIN A LOS CONTROLES HTML La sintaxis que ofrecen los controles HTML de servidor es muy similar a la de los controles clsicos del lenguaje HTML. 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. Estos controles tienen el mismo aspecto que una etiqueta HTML, a excepcin de que presentan el atributo runat con el valor server. Otra diferencia es que posee un atributo especial para el tratamiento de eventos del cliente con cdigo del servidor. Para realizar el tratamiento de eventos de estos controles con cdigo de servidor, utilizaremos el atributo onserverevento. A este atributo se le indica como valor el nombre del mtodo que queremos ejecutar. Por otra parte, para identificar de forma nica un control ASP.NET, debemos utilizar la propiedad id. Mediante este identificador podemos hacer referencia al objeto correspondiente en la pgina y as utilizar el cdigo de servidor para acceder a sus mtodos o manipular sus propiedades. Cada control del formulario es un objeto (objetos de la pgina ASP.NET), es decir, una instancia de una clase determinada y, por tanto, cada uno de ellos poseer sus propiedades y mtodos. As, la sintaxis general de un control HTML es:

<input type=elementoHTML id=identificador runat=server>

12

Conceptos de web form


Los controles HTML estn disponibles para mantener la compatibilidad con versiones anteriores de ASP, de manera que, si queremos que una etiqueta HTML pase a ser un control HTML, simplemente debemos indicar la propiedad runat con el valor server. Normalmente, se utilizan los controles web (que tambin veremos en este captulo). A continuacin vamos a ver una descripcin de las distintas clases que se corresponden con los controles HTML. Estas clases se encuentran dentro del espacio de nombres System.Web.UI.HtmlControls y ofrecen al desarrollador el acceso en el servidor a las distintas etiquetas HTML que finalmente se enviarn al cliente web como resultado de la ejecucin de la pgina ASP.NET correspondiente. La lista de los controles HTML que vienen predefinidos en el sistema ASP.NET son los siguientes: HTMLAnchor: representa a la etiqueta <a>, es decir, es el control HTML que nos permite manejar enlaces. HTMLForm: representa a la etiqueta <form> de HTML. Esta clase permite definir un web form, que va a realizar la labor de contenedor para los controles de servidor dentro de la pgina, es decir, todos los controles que deseemos enviar al servidor (mtodo post) debemos incluirlos dentro de un control de la clase HtmlForm. HTMLGenericControl: esta clase se utiliza para representar las etiquetas HTML que no tienen una correspondencia directa con las clases del paquete .NET Framework (como las etiquetas <span>, <div> o <body>). HTMLImage: representa a la etiqueta <img> de HTML, que se utiliza para mostrar imgenes. HTMLButton: caracteriza a los botones de pulsacin para formularios HTML del tipo button, submit y reset (botn normal, de envo y de restauracin del formulario). HTMLInputCheckBox: se refiere al elemento <input type=checkbox>, que es una casilla de verificacin de HTML. HTMLInputFile: describe al elemento <input type=file>, que se utiliza para subir ficheros desde el cliente al servidor. HTMLInputHidden: se refiere al elemento <input type=hidden>, que es un control invisible para almacenar valores alfanumricos.

13

Conceptos de web form


HTMLInputimage: caracteriza al elemento <input type=image>, que es una imagen que presenta una funcionalidad de envo de un formulario HTML. HTMLInputRadioButton: representa al elemento <input type=radio>, que es una casilla de opcin de HTML. HTMLInputText: describe a los elementos <input type=text> y <input

type=password>, que son cajas de texto y contrasea de un formulario HTML. HTMLSelect: se refiere al elemento <select> que es un desplegable de un formulario HTML. HTMLTable: este control se corresponde con una tabla del lenguaje HTML y por tanto, permite el acceso desde el servidor a una etiqueta <table>. Esta clase posee una coleccin llamada Rows, que contiene objetos de la clase HTMLTableRow. HTMLTableRow: es el control HTML que permite manipular una fila de una tabla. HTMLTableCell: esta clase permite el acceso a las celdas de una tabla, es decir, se corresponde con las etiquetas <td> y <th>. HTMLTextArea: este control permite manipular en el servidor la etiqueta <textarea>, que es una caja de texto de gran capacidad en un formulario HTML.

Paleta de controles HTML en Visual Studio .NET

14

Conceptos de web form


5.1. EJEMPLOS CON CONTROLES HTML

Ejemplo1.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo1.aspx.cs" Inherits="_Default" %> <html> <head> <title>Ejemplo de uso de controles HTML en una pgina ASP.NET</title> </head> <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>

Ejemplo1.aspx.cs using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void cambia(Object origen, EventArgs args) { etiqueta.InnerText = lista.Value; } }

15

Conceptos de web form


Este ejemplo muestra una lista desplegable con una serie de nombres de colores y un botn. Al pulsar el botn se muestra el elemento seleccionado de la lista en un texto de un elemento <div>. Hemos accedido a las propiedades de los controles a travs del nombre con el que los hemos declarado (el valor del atributo id, que permite tener acceso a las propiedades y mtodos de cada control del formulario). Asimismo, accedemos a la propiedad innerText de la etiqueta para asignarle el valor obtenido de la lista desplegable. Si hacemos distintas llamadas al formulario, podremos observar que se mantiene el estado del mismo, es decir, en el combo se mantiene el elemento seleccionado, sin que tengamos que escribir ningn cdigo adicional para controlarlo. Esto es posible gracias a que el web form genera un campo oculto que conserva los valores de los campos del formulario.

Resultado de ejecutar Ejemplo1.aspx en el navegador

16

Conceptos de web form


Ejemplo2.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo2.aspx.cs" Inherits="_Default" %>

<html> <head> <title>Ejemplo de uso de controles HTML en una pgina ASP.NET</title> </head> <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> <option value="green">Verde</option> <option value="white">Blanco</option> <option value="yellow">Amarillo</option> </select> <input type="button" id="boton" runat="server" value="Seleccione un color" onserverclick="cambia"> </form> </body> </html>

Ejemplo2.aspx.cs

using System;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void cambia(Object origen, EventArgs args) { cuerpo.Style["background-color"] = lista.Value; } }

17

Conceptos de web form


En este ejemplo utilizamos un control HTML de la clase HtmlGenericControl y dos objetos de las clases HtmllnputButton y HtmlSelect, que se corresponden con el botn y la lista desplegable del formulario. Al seleccionar un elemento de la lista (un color), y pulsar el botn, se mostrar el documento HTML con el color de fondo seleccionado en el combo. Podemos ver cmo aplicar estilos a los controles ASP.NET. Para ello, usamos la propiedad Style del control, que funciona como una coleccin permitiendo acceder a las distintas propiedades del control que representan los atributos de las hojas de estilo. En este caso se manipula la propiedad background-color, para establecer el color de fondo de la pgina actual.

Resultado de ejecutar Ejemplo2.aspx en el navegador

Ejemplo3.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo3.aspx.cs" Inherits="_Default" %>

<html>

18

Conceptos de web form


<head> <title>Ejemplo de uso de controles HTML en una pgina ASP.NET</title> </head> <body id="cuerpo" runat="server"> <form id="formulario" runat="server">

<select id="lista" runat="server"> <option>imagen1.jpg</option> <option>imagen2.jpg</option> </select> <input type="button" id="boton" runat="server" value="Cambia" onserverclick="cambiaImagen"> <br /> <img src="imagen2.jpg" runat="server" id="imagen"> </form> </body> </html>

Ejemplo3.aspx.cs

using System;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) {

} protected void cambiaImagen(Object origen, EventArgs args) { imagen.Src = lista.Value; } }

En este ejemplo se muestra la imagen que se indica en la caja de texto. La imagen se actualiza con la que indiquemos cada vez que se pulse el botn del formulario.

19

Conceptos de web form

Resultado de ejecutar Ejemplo3.aspx en el navegador

6. INTRODUCCIN A LOS CONTROLES WEB Estos controles cumplen la misma funcionalidad que los anteriores pero su sintaxis es distinta, ya que est basada en XML y adems, no existe una correspondencia directa entre los controles y las etiquetas HTML que se generan (como suceda con los controles HTML). Estos controles pertenecen al espacio de nombres System.Web.UI.WebControls. Adems, ofrecen un nivel de abstraccin mayor que los anteriores y su modelo de objetos no refleja la sintaxis HTML necesariamente (cuando la pgina se carga en el navegador, el control web determina el navegador que ha realizado la peticin y de acuerdo con esta informacin genera el cdigo HTML apropiado y especfico para ese navegador web). La sintaxis general de un control web es:

<asp:nombreControl id="identificador" runat="server"> //cuerpo </asp:nombreControl>

20

Conceptos de web form


Cuando el control no tiene cuerpo, tambin podemos usar esta otra forma de sintaxis:

<asp:nombreControl id="identificador" runat="server" />

Adems de la diferencia de sintaxis entre los controles HTML y controles web, existen otras: Algunos nombres de propiedades cambian. Por ejemplo, el control HTML button posee la propiedad value, y sin embargo el control web equivalente posee la propiedad text para mostrar el texto del botn. Aunque para indicar los mtodos para el tratamiento de eventos de la pulsacin de un botn del ratn en los controles HTML hemos visto que utilizamos la propiedad onserverclick, en los controles web utilizamos la propiedad OnClick. En los controles HTML se debe distinguir si se trata de un evento de cliente o de servidor (ya que podemos tratar ambos tipos, de servidor como hemos visto en el apartado de controles HTML, y de cliente, a travs de algn lenguaje de Script de cliente, como JavaScript). Sin embargo, desde los controles web slo tenemos la posibilidad de utilizar eventos de servidor, es decir, eventos que son tratados por rutinas que se ejecutan en el servidor. Por otra parte, al igual que ocurra con los controles HTML, para permitir hacer referencia a los controles dentro del cdigo fuente de la pgina, debemos utilizar el atributo id. De esta forma, podemos utilizar el objeto que se corresponde con el control de servidor para utilizar sus mtodos o manipular sus propiedades. A continuacin, vamos a ver los principales controles web que vienen predefinidos en el sistema ASP.NET1: Button: se refiere a un botn. Se corresponde con la etiqueta <input type=submit>, es decir, un botn que enva el contenido de un formulario al servidor. Para tratar el evento de pulsacin del botn, utilizamos la propiedad OnClick de la clase Button. CheckBox: describe una casilla de verificacin. Se corresponde con la etiqueta <input type=checkbox>. El evento que se lanza al pulsar sobre un CheckBox es el evento CheckedChanged. Para utilizar checkbox mltiples podemos usar el control CheckBoxList. CheckBoxList: permite utilizar una lista de seleccin mltiple de elementos Checkbox.

Para una referencia completa de todos ellos, debemos consultar la referencia tcnica de Microsoft.

21

Conceptos de web form


Este objeto posee una coleccin Items que contiene todos los objetos CheckBox. DropDownList: este control representa una lista desplegable y se corresponde con la etiqueta <select> de HTML. HiperLink: caracteriza un elemento de hipervnculo (enlace) a otra pgina, por lo tanto, generar en el cliente una etiqueta <a>. Image: este control representa una imagen. Generar como resultado de su ejecucin una etiqueta <img> de HTML. Para indicar la imagen que queremos mostrar, utilizaremos la propiedad ImageURL. ImageButton: representa una imagen que acta como botn tipo submit, es decir, al pulsar sobre la imagen se envan los contenidos del formulario al servidor. Generar como resultado de su ejecucin una etiqueta <input type=image> de HTML. Label: se refiere a una etiqueta de texto. Generar como resultado de su ejecucin una etiqueta <span> de HTML. LinkButton: este control representa un botn que presenta un estilo similar a los enlaces. Su apariencia es similar a un control Hiperlink, pero ofrece la misma funcionalidad que un control Button, es decir, presenta un texto a modo de enlace que al pulsarlo enviar el formulario en el que se encuentre al servidor. ListBox: se refiere a un cuadro de lista, es similar al control DropDownList, pero en este caso se muestran varios elementos de la lista y se permite la seleccin mltiple. En su propiedad Rows indicamos el nmero de filas visibles que va a mostrar el control, y en la propiedad SelectionMode indicamos si se permite la seleccin mltiple (valor Multiple) o bien la seleccin simple (valor Single, es el valor por defecto). Panel: este control se utiliza para agrupar controles (acta como contenedor de otros controles). Posee una propiedad Controls que es una coleccin que contiene todos los controles incluidos dentro del objeto Panel. RadioButton: representa un botn de opcin que se corresponde con el elemento <input type=radio> de HTML. Permite elegir entre un grupo de opciones. Dichas opciones se agrupan mediante la propiedad GroupName. RadioButtonList: este control representa una lista de seleccin mltiple de elementos RadioButton y posee una coleccin Items que contiene todos los objetos RadioButton. Este control es parecido al control CheckBoxList, pero en este caso se utilizan controles RadioButton en lugar de CheckBox.

22

Conceptos de web form


Style: caracteriza al estilo (CSS) de un control de servidor, es decir, podemos usar estilos para mejorar y personalizar el aspecto de los controles. Table, TableRow y TableCell: estn muy relacionados entre s. Mediante la utilizacin de todos ellos podemos generar tablas en HTML. El control Table representa una tabla (etiqueta <table> de HTML). Esta clase posee una coleccin llamada Rows, que contiene objetos de la clase TableRow, y que representan las filas de la tabla. El objeto TableRow tiene una coleccin llamada Cells, que contiene las columnas para esa fila de la tabla. El control TableCell representa una celda en un control. Se puede utilizar la propiedad Text para especificar el contenido de la celda. Se usa en conjuncin con los controles Table y TableRow. TextBox: representa una caja de texto. Xml: se utiliza para mostrar un documento XML en la pgina.

Creando un web form en la vista diseo de Visual Web Developer 2008 Express

23

Conceptos de web form


6.1. EJEMPLOS CON CONTROLES WEB Ejemplo4.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo4.aspx.cs" Inherits="_Default" %> <html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> </head> <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> Ejemplo4.aspx.cs using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void cambia(Object origen, EventArgs args) { etiqueta.Text = "Ha seleccionado " + lista.SelectedItem.Text; } }

24

Conceptos de web form


Este ejemplo muestra un formulario con una lista desplegable con los nombres de distintos lenguajes de programacin y un botn. Al seleccionar un elemento de la lista y pulsar el botn, se muestra el elemento elegido de la lista en una etiqueta.

Resultado de ejecutar Ejemplo4.aspx en el navegador.

Ejemplo5.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo5.aspx.cs" Inherits="_Default" %> <html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> </head> <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>

25

Conceptos de web form


Ejemplo5.aspx.cs

using System;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) {

} protected void obtenerFecha(Object origen, EventArgs args) { DateTime ahora; ahora = DateTime.Now; etiqueta.Text = "Fecha/Hora actuales: " + ahora.ToString(); } }

En este ejemplo se muestra la fecha y hora actuales en un objeto de la clase Label al capturar el evento de pulsacin del botn.

Resultado de ejecutar Ejemplo5.aspx en el navegador.

26

Conceptos de web form


Ejemplo6.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo6.aspx.cs" Inherits="_Default" %> <html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> </head> <body> <form id="formulario" <asp:CheckBox verificacin" /><br> id="boton" runat="server" Text="Comprobar" runat="server" method="post"> runat="server" Text="Casilla de

id="casilla"

<asp:Button

OnClick="compruebaCasilla" /><br> <asp:Label </form> </body> </html> Ejemplo6.aspx.cs using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object sender, EventArgs e) { } protected void compruebaCasilla(Object origen, EventArgs args) { if (casilla.Checked == true) { etiqueta.Text = "La casilla de verificacin est marcada "; } else { etiqueta.Text = "La casilla de verificacin no est marcada "; } } } id="etiqueta" runat="server" />

27

Conceptos de web form


En este ejemplo, al pulsar el botn se comprueba si el objeto de la clase Checkbox se encuentra marcado o no y se muestra un mensaje indicndolo en un objeto de la clase Label.

Resultado de ejecutar Ejemplo6.aspx en el navegador.

Ejemplo7.aspx

<html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> <style> .estilo{ font: 14px verdana; color: red; backgroundcolor:#CCCCCC }

</style> </head> <body> <asp:Label id=etiqueta runat=server CssClass=estilo > Ejemplo de aplicacin de estilos sobre un control Web Label</asp:Label> </body> </html>

28

Conceptos de web form


Podemos aplicar un estilo a un control web a travs de la propiedad CssClass. Para ello, a esta propiedad le asignaremos el nombre de la clase que define el estilo que se desea aplicar al control.

Resultado de ejecutar Ejemplo7.aspx en el navegador.

Ejemplo8.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo8.aspx.cs" Inherits="_Default" %>

<html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> </head> <body> <asp:Label id="etiqueta" runat="server" > Ejemplo de aplicacin de estilos sobre un control Web </asp:Label> </body> </html>

29

Conceptos de web form


Ejemplo8.aspx.cs using System; using System.Drawing; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { void Page_Load(Object origen, EventArgs args) { Style estilo = new Style(); estilo.BorderColor=Color.Green; estilo.BorderStyle=BorderStyle.Dashed; estilo.ForeColor=Color.Blue; estilo.BackColor=Color.Pink; estilo.Font.Name = "Courier"; estilo.Font.Size = 16; estilo.Font.Italic=true; etiqueta.ApplyStyle(estilo); } }

Por ltimo, otra forma de aplicar un estilo a un control web es a travs del mtodo ApplyStyle. Este mtodo recibe como parmetro un objeto de la clase Style (cuyas propiedades contienen los valores del estilo). En este ejemplo hemos importado el espacio de nombres System.Drawing, para tener acceso a las clases Color y BorderStyle.

Resultado de ejecutar ejemplo8.aspx en el navegador.

30

Conceptos de web form


Ejemplo9.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ejemplo9.aspx.cs" Inherits="_Default" %>

<html> <head> <title>Ejemplo de uso de controles Web en una pgina ASP.NET</title> </head> <body> <form id="formulario" runat="server" method="post">

<asp:DropDownList AutoPostBack="True" id="lista" OnSelectedIndexChanged="cambiaImagen" runat="server" >

<asp:ListItem value="imagen1.gif">imagen 1</asp:ListItem> <asp:ListItem value="imagen2.jpg">imagen 2</asp:ListItem> </asp:DropDownList> <br /> <asp:Image id="imagen" runat="server" ImageUrl=" " AlternateText="" /> </form> </body> </html>

Ejemplo9.aspx.cs

using System; using System.Drawing; using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { void cambiaImagen(Object origen, EventArgs args) { imagen.ImageUrl = lista.SelectedItem.Value; imagen.AlternateText = lista.SelectedItem.Text; } }

31

Conceptos de web form


Este web form tiene un control DropDownList y un control Image. Este control Image mostrar la imagen que seleccionemos del DropDownList. Capturamos el evento OnSelectedIndexChanged de DropDownList para realizarlo. Este evento se produce cada vez que se modifica la seleccin de un elemento en la lista. La propiedad AutoPostBack del objeto DropDownList tiene el valor true.

Resultado de ejecutar Ejemplo9.aspx en el navegador.

32

Conceptos de web form


Podemos representar la pgina ASP.NET actual como un objeto de la clase Page. Este objeto nos sirve como contenedor de todos los componentes que constituyen la pgina y nos permite acceder a sus propiedades, mtodos y eventos. Los web forms sustituyen a los formularios HTML dentro del entorno de programacin de ASP.NET. Dentro del formulario web colocaremos los distintos controles de servidor de ASP.NET que necesitemos para recoger la informacin correspondiente. Existe un gran nmero de controles de servidor y cada uno de ellos pertenece a una clase del paquete.NET Framework. Existen controles HTML, controles web, controles de lista y controles avanzados. Los web forms ofrecen un modelo de programacin ms visual, el cdigo resultante es ms limpio, permiten una mayor separacin entre la lgica de la aplicacin y la presentacin de la misma, integran el tratamiento de eventos del cliente con el cdigo correspondiente en el servidor y llevan a cabo el mantenimiento del estado del formulario de forma automtica entre peticiones.

recuerde_

33

Introduccin al enlace a datos y LINQ

ndice_
1. INTRODUCCIN ...............................................................................3 2. ARQUITECTURA Y FUNCIONAMIENTO DE ADO.NET ...........................3 2.1. MODO CONECTADO Y DESCONECTADO .....................................7 3. ACCESO A BASES DE DATOS SIN ADO.NET ........................................8 3.1. CONTROLES DE ORIGEN DE DATOS ..........................................9 3.2. CONTROLES DE ENLACE A DATOS .............................................9 4. ACCEDIENDO A DATOS CON ADO.NET .............................................11 5. ACCEDIENDO A DATOS SIN ADO.NET..............................................15 6. LINQ ..............................................................................................18

formacin digital

Introduccin al enlace a datos y LINQ


1. INTRODUCCIN Casi todas las aplicaciones web dinmicas realizan algn tipo de acceso a datos. Framework .NET incluye un gran soporte para trabajar con bases de datos y otras fuentes de datos de una manera muy sencilla. .NET proporciona una tecnologa de enlace a datos (ADO.NET) que nos da una solucin eficiente para situaciones tales como seleccionar y mostrar datos, actualizar, insertar, borrar, filtrar, ordenar Este enfoque era normal en versiones anteriores (ASP). Sin embargo, ASP.NET permite, con la ayuda de Visual Studio 2008, realizar el enlace a datos directamente sin usar las clases de ADO.NET. Esta solucin no requiere la existencia de cdigo para los escenarios de datos ms comunes: seleccionar y mostrar datos, ordenar, paginar, almacenar datos en memoria cach, actualizar, insertar o eliminar datos, filtrar en tiempo de ejecucin, etc. Por ltimo, tambin estudiaremos en este captulo una breve introduccin a Lenguage Integrated Query (LINQ), el nuevo proyecto de Microsoft que agrega consultas nativas, semejantes a las de SQL, a los lenguajes del .NET Framework, inicialmente a C# y a Visual Basic .NET.

2. ARQUITECTURA Y FUNCIONAMIENTO DE ADO.NET En los ltimos aos, ADO.NET ha sido considerado como una de las tecnologas pioneras para realizar conexiones a bases de datos con C#. Ofrece un alto nivel de abstraccin, lo que nos permite trabajar con datos con un enfoque orientado a objetos. Una perspectiva a alto nivel de la arquitectura formada por los componentes de ADO.NET puede ayudarnos a entender cmo encajan las piezas entre s y facilitar mucho la tarea cuando vayamos a elegir los objetos que necesitemos:

Introduccin al enlace a datos y LINQ

Application

DataSet DataReader DataAdapter

Command

Connection

Almacn de Datos
Arquitectura de ADO.NET

Fuente: Mayo, Joe. C# 3.0 Unleashed with the .NET Framework 3.5. Pearson Education. United States of America. 2008. En la figura podemos ver varios componentes que van desde la aplicacin hasta el almacn de datos. La aplicacin es nuestro programa. Puede ser una aplicacin web, de escritorio o algn otro programa que requiera del acceso a datos. A continuacin, describiremos los componentes de ADO.NET por separado, explicando su utilidad: DataReader es un objeto avanzado para leer datos. Es el camino ms rpido para leer informacin desde una base de datos. No obstante, tambin necesitamos un objeto Command si lo que necesitamos son operaciones de insercin, actualizacin y borrado.

Introduccin al enlace a datos y LINQ


El DataSet puede verse como una instantnea de los datos en memoria. Utiliza un objeto DataAdapter para leer y escribir datos desde y hacia la base de datos a travs sus cuatro propiedades (SelectCommand, UpdateCommand, InsertCommand y DeleteCommand) para las operaciones: seleccionar, insertar, actualizar y borrar. En la siguiente figura podemos ver las cuatro propiedades que tiene el objeto DataAdapter:

Command Connection CommandText CommandType DataAdapter Command Connection Connection UpdateCommand ConnectionString CommandText CommandType InsertCommand SelectCommand

DeleteCommand Command Base de datos Connection CommandText CommandType DataSet

Command Connection CommandText CommandType

Las cuatro propiedades del objeto DataAdapter

Fuente: MacDonald, Matthew; Szpuszta, Mario. Pro ASP.NET 3.5 in C# 2008. Apress. United States of America. 2007. El DataSet representa un conjunto completo de datos que incluye tablas y relaciones entre ellas. Una representacin de la arquitectura de un DataSet la podemos observar en la siguiente figura:

Introduccin al enlace a datos y LINQ

DataSet

DataTable DataColumns DataRow

DataTable DataColumns DataRow

DataRelation
Arquitectura de un DataSet

Fuente: MacDonald; Matthew Szpuszta, Mario. Pro ASP.NET 3.5 in C# 2008. Apress. United States of America. 2007. Todos los objetos de ADO.NET usan uno o ms objetos Command y, como podemos observar en la figura, tambin podemos utilizar un objeto Command directamente desde nuestra aplicacin. El objeto Command contiene la consulta que ser enviada a la fuente de datos. Por cada consulta, es necesario un objeto Connection que sepa donde est la base de datos. Un objeto Command no sabe dnde ser ejecutado, por lo que contiene la referencia al objeto Connection para ello. Es importante realizar un seguimiento de cundo se abre y cierra un objeto Connection. La fuente de datos es un recurso del que somos responsables. Por lo tanto, es esencial cerrar las conexiones correctamente para que la aplicacin gane en rendimiento y escalabilidad.

Introduccin al enlace a datos y LINQ


Por otra parte, el origen de datos es un sistema que mantiene los datos que le interesa. Es fcil pensar en ella como una base de datos relacional, pero puede ser muchas cosas, tales como XML u OleDb. El proveedor de datos .NET provee del enlace entre el Origen de Datos y el DataSet. A continuacin, se enumeran los proveedores de datos que se incluyen en .NET Framework: Proveedor de datos para SQL Server, proporciona acceso a datos para Microsoft SQL Server versin 7.0 o posterior. Utiliza el espacio de nombres System.Data.SqlClient. Proveedor de datos para OLE DB, para orgenes de datos que se exponen mediante OLE DB. Utiliza el espacio de nombres System.Data.Oledb. Proveedor de datos para ODBC, para orgenes de datos que se exponen mediante ODBC. Utiliza el espacio de nombres System.Data.Odbc. Proveedor de datos para Oracle, para orgenes de datos de Oracle. El proveedor de datos de .NET Framework para Oracle es compatible con la versin 8.1.7 y posteriores del software de cliente de Oracle y utiliza el espacio de nombres System.Data.OracleClient. Proveedor EntityClient, proporciona acceso a datos para las aplicaciones de Entity Data Model (EDM). Utiliza el espacio de nombre System.Data.EntityClient. 2.1. MODO CONECTADO Y DESCONECTADO ADO.NET soporta los modos Conectado y Desconectado. Necesitaremos saber qu requiere nuestra aplicacin para determinar cul nos conviene. Operar en modo Conectado significa que debemos escribir explcitamente el cdigo para abrir y cerrar el objeto Connection. Los objetos que participan en operaciones de este tipo son: DataReader. Se utiliza para leer los datos. Command. Se emplea para insertar, actualizar y borrar.

Trabajar con operaciones en modo Desconectado significa que podemos trabajar con los datos en memoria sin tener la conexin a la base de datos abierta, lo que reduce al mximo el nmero de conexiones abiertas en la base de datos.

Introduccin al enlace a datos y LINQ


Los controles DataSet y DataAdapter habilitan operaciones en modo desconectado. Cuando se recuperan datos de una base de datos, el DataAdapter abre una conexin, rellena un DataSet especfico y cierra automticamente la conexin tan pronto como se hayan ledo los datos. Una vez ledos y realizados los cambios pertinentes, usaremos el DataAdapter para abrir la conexin y actualizar la fuente de datos usando el DataSet como origen, despus se cierra la conexin automticamente El modo Desconectado ser el que usemos en los ejemplos, ya que es ms apropiado para el desarrollo web.

3. ACCESO A BASES DE DATOS SIN ADO.NET El enlace de datos sin ADO.NET representa una conexin directa a una base de datos en una aplicacin web, que puede ser usada por los controles de enlazado de datos (p.ej. GridView) para obtener los datos de forma automtica. Dependiendo de nuestras necesidades, podemos utilizar uno o ms de estos enfoques para complementar el cdigo del acceso a datos con ADO.NET (o evitar que lo escriba completamente). Las opciones de acceso a bases de datos sin incluir ADO.NET, son las siguientes: El control SqlDataSource: es un control que permite definir consultas declarativamente. LINQ to SQL: con LINQ to SQL, podemos definir una consulta usando cdigo C# (o usando el control LinqDataSource). Ninguna de estas opciones puede reemplazar a ADO.NET completamente, ya que ninguno ofrece la flexibilidad, personalizacin y el rendimiento que ofrece el cdigo escrito a mano. Sin embargo, dependiendo de nuestras necesidades, podemos utilizar una de estas opciones para obtener mejor productividad. De esta forma, el acceso a datos sin ADO.NET est dirigido hacia los sitios pequeos hechos por hobby o personales, que no requieren una encapsulacin total de los objetos de datos.

Introduccin al enlace a datos y LINQ


Debido a que en este modelo las peticiones de datos se especifican directamente como propiedades de los controles de fuente de datos, a veces es llamado modelo de dos capas, ya que las peticiones de datos se mantienen en el cdigo de la pgina. Por ltimo, ASP.NET posee dos tipos de controles de servidor que participan en el modelo de enlace a datos sin ADO.NET: controles de origen de datos y controles enlazados a datos. Los estudiaremos en los prximos apartados. 3.1. CONTROLES DE ORIGEN DE DATOS Los controles de origen de datos son un nuevo tipo de control de servidor y constituyen una parte esencial de la arquitectura de enlace de datos en ASP.NET. Este tipo de controles es capaz de realizar el enlace al almacn de datos automticamente. De hecho, los controles de origen de datos representan un almacn de datos -la abstraccin de l- y las operaciones pueden realizarse sobre los datos contenidos. Los controles de enlace a datos se asocian a un control de origen de datos mediante la propiedad DataSourceID. ASP.NET incluye controles de servidor por defecto, veremos los ms usuales: SqlDataSource permite enlazar a una base de datos SQL representada por un proveedor ADO.NET. El control ObjectDataSource de ASP.NET representa un objeto de nivel medio con funciones de recuperacin de datos y de actualizacin. AccessDataSource permite enlazar a una base de datos Microsoft Access (Jet). XmlDataSource permite enlazar a un fichero o documento XML.

3.2. CONTROLES DE ENLACE A DATOS Los controles de enlace a datos son controles de Interfaz de Usuario (UI) que representan los datos en un navegador cliente u otro dispositivo. Un control de este tipo puede autoenlazar una fuente de datos y traer los datos dentro del ciclo de vida de la pgina.

Introduccin al enlace a datos y LINQ


Del mismo modo, estos controles pueden aprovecharse de las capacidades de la fuente de datos como por ejemplo clasificacin, paginacin, filtrado, actualizacin, borrado o insercin. Como comentamos anteriormente, un control enlazado a datos se conecta a una fuente de datos mediante su propiedad DataSourceID. A continuacin, veremos algunos de estos controles: Controles de lista. Representan los datos en forma de listas. Entre ellos se encuentran los controles BulletedList, CheckBoxList, DropDownList, ListBox y RadioButtonList.

AdRotator representa los anuncios de una pgina como una imagen en la que se puede hacer clic para ir a una URL asociada al anuncio.

GridView presenta los datos en formato de rejilla. Es una evolucin del DataGrid y puede aprovechar automticamente las caractersticas de la fuente de datos.

DataList resulta til para mostrar datos que se encuentran en una estructura que se repite, como una tabla. Adems, puede mostrar los datos con diferentes diseos, como por ejemplo, ordenados en columnas o filas.

DetailsView presenta un solo elemento en una tabla de parejas etiqueta/valor, similar a las vista de formulario de Microsoft Access. Este control tambin puede aprovechar automticamente las caractersticas de la fuente de datos.

FormView resulta til para mostrar un registro individual de un origen de datos. Es similar al control DetailsView, exceptuando que muestra plantillas definidas por el usuario, en lugar de campos de fila.

TreeView presenta los datos en una vista de rbol jerrquico de nodos expandibles. ListView. La versin ASP.NET 3.5 introduce este nuevo control de enlace a datos. Puede reemplazar literalmente el resto de los controles de enlace de datos en ASP.NET. De hecho, podra omitir cualquier otro control de la lista superior con este control. Asimismo, ListView facilita en gran medida numerosas tareas de enlace de datos en comparacin con los controles anteriores, incluidos los estilos con CSS, la paginacin flexible y un complemento completo para clasificar, insertar, eliminar y actualizar caractersticas.

10

Introduccin al enlace a datos y LINQ


Por otra parte, es un control controlado por plantillas, lo que significa que no representar nada de manera predeterminada, debe especificarlo con las citadas plantillas.

4. ACCEDIENDO A DATOS CON ADO.NET Vamos a realizar un ejemplo que consiste en visualizar los datos de una tabla en un GridView. Se ha usado la tcnica de separacin de cdigo core-behind y el acceso a datos en modo Desconectado (DataSet y DataAdapter). No obstante, antes veremos cmo podemos crear una base de datos desde Visual Web Developer: En el men vamos a Ver Explorador de bases de datos. Una vez en la pantalla del

explorador de bases de datos, agregamos una nueva conexin:

11

Introduccin al enlace a datos y LINQ


En la siguiente pantalla escribimos el nombre de la nueva base de datos y pulsamos Aceptar (crearemos una base de datos de Microsoft SQL Server):

Una vez que hemos creado la base de datos vaca, tendremos que crear una tabla y rellenarla con algn dato:

12

Introduccin al enlace a datos y LINQ


Escribimos los campos que queremos en la base de datos (establecemos el campo Id como clave principal) y guardamos (nos pedir el nombre para la tabla):

Para introducir registros en la base de datos hacemos clic en Mostrar datos de la tabla:

13

Introduccin al enlace a datos y LINQ

Una vez realizado todo lo anterior, ya podemos usar la base de datos relacional creada para realizar las tareas bsicas que nos propusimos para este apartado.

Procedemos pues a realizar nuestro ejemplo: En el fichero EjemploDatos1.aspx hemos incluido slo un GridView y el fichero

EjemploDatos1.aspx.cs quedara de la siguiente manera:

EjemploDatos1.aspx.cs using System; using System.Data; using System.Data.SqlClient; using System.Data.Sql; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { String sConex="Data Source=.\\SQLEXPRESS; AttachDbFilename=|DataDirectory|\\pruebaBD.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True"; SqlConnection conex = new SqlConnection(); DataSet dset = new DataSet(); conex.ConnectionString = sConex; SqlDataAdapter adaptador = new SqlDataAdapter("SELECT Titulo, Descripcion FROM PROYECTOS",conex); adaptador.Fill(dset, "Proyectos"); GridView1.DataSource = dset; GridView1.DataBind(); } } Si nos fijamos en la cadena de conexin sConex, vemos que cuando hacemos referencia al fichero de la base de datos bdprueba.mdf ponemos delante |DataDirectory|. Esto hace referencia a la carpeta App_Data que se encuentra en el directorio del proyecto. Nos hemos servido de un objeto SqlConnection para realizar la conexin a la base de datos, un objeto DataSet para volcar los datos en l, lo cual nos habilita operar en modo Desconectado y, por ltimo, incluimos el objeto SqlAdapter que ser el encargado de lanzar la consulta sobre la base de datos y volcar el resultado en el DataSet con el mtodo Fill(dSet,Proyectos). Este mtodo crea, de forma implcita, un objeto DataTable (con la tabla devuelta por la consulta) dentro del DataSet y lo llama Proyectos. Si volvisemos a llamar al mtodo Fill con otra consulta distinta cargada en el DataAdapter, aadiramos otra nueva tabla al DataSet. Como vimos, el objeto DataSet representa a una abstraccin de un almacn de datos, en este caso es una abstraccin de una base de datos compuesta nicamente por la tabla devuelta por la consulta que ha realizado el SqlDataAdapter.

14

Introduccin al enlace a datos y LINQ


Finalmente, enlazamos el GridView con el DataSet a travs de la propiedad DataSource y llamando al mtodo DataBind(). El resultado de la visualizacin de la pgina en el navegador ser algo como esto:

5. ACCEDIENDO A DATOS SIN ADO.NET Como estudiamos anteriormente, el acceso a datos sin usar ADO.NET permite a los controles de enlace a datos obtener los datos de forma automtica, sin apenas escribir cdigo. A continuacin veremos un ejemplo. Con la base de datos ya creada, queremos incluir un control GridView a nuestra pgina de una forma muy sencilla.

15

Introduccin al enlace a datos y LINQ


Para empezar, arrastramos la tabla desde el explorador de bases de datos hasta la posicin de la pgina donde queramos el GridView y automticamente se generar el cdigo necesario:

Como podemos observar se han creado dos controles: un control de origen de datos (SqlDataSource) y otro de enlazado de datos (GridView). De igual forma, podemos configurar varios aspectos del GridView (habilitar paginacin, ordenacin, edicin, eliminacin), y modificar la apariencia del control y las columnas que queramos que aparezcan: ( ver pgina siguiente).

16

Introduccin al enlace a datos y LINQ

El resultado de la ejecucin de la pgina en el navegador ser algo como esto:

17

Introduccin al enlace a datos y LINQ


6. LINQ El objetivo de LINQ es que el programador slo necesite conocer un lenguaje (C# o VB.NET) y pueda con l consultar y modificar los datos sin tener que preocuparse de si est trabajando con una base de datos, una coleccin de objetos en memoria, un archivo XML Para ello, utilizaremos en cada caso un proveedor especfico como LINQ to Objects, LINQ to SQL, LINQ to XML, LINQ to DataSet siempre de manera transparente al programador.

C#

VB.NET .NET Language Integrated Quero (LINQ) LINQ habilitado para fuentes de datos LINQ habilitado para ADO.NET

Otros Lenguajes

LINQ to Objects

LINQ to DataSets

LINQ to SQL

LINQ to Entities

LINQ to XML

<libro> <titulo> <autor> <precio> </libro>

Objetos

BD Relacional

XML

Arquitectura de LINQ

Fuente: Fuente: http://msdn.microsoft.com/en-us/magazine/cc163400.aspx Vamos a ver un programa de ejemplo donde utilizamos un array de nombres y determinamos, mediante una enumeracin, la consulta que queremos realizar, que sera saber todos los nombres que empiezan con la letra E. Tenemos que nuestros operadores seran: from, where, order by, select.

using using using using using using

System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page

18

Introduccin al enlace a datos y LINQ

{ string[] _nombres = { "Edison", "Daniel", "Edgar", "Esperanza", "Alberto", "Jorge", "Omar", "David" }; protected void Page_Load(object sender, EventArgs e) { Response.Write("<b>El vector de nombres se compone de los siguientes nombres: </b><br>"); foreach (string elemento in _nombres) { Response.Write(elemento + "<br>"); } IEnumerable<string> expresion = from nom in _nombres where nom.StartsWith("E") orderby nom select nom; Response.Write("<br><b>Los nombres que empiezan por 'E' son: </b><br>"); foreach (string elemento in expresion) { Response.Write(elemento + "<br>"); } } }

19

Introduccin al enlace a datos y LINQ


.NET proporciona una tecnologa de enlace a datos (ADO.NET) que nos da una solucin eficiente para situaciones tales como seleccionar y mostrar datos, actualizar, insertar, borrar, filtrar, ordenar Sin embargo, ASP.NET tambin permite realizar el enlace a datos directamente sin usar las clases de ADO.NET. Los componentes que forman parte de la arquitectura de ADO.NET son: Connection, Command, DataReader, DataSet y DataAdapter. Operar en modo Conectado significa que debemos escribir explcitamente el cdigo para abrir y cerrar el objeto Connection. Los objetos que participan en operaciones de este tipo son DataReader y Command. Podemos utilizar el DataReader para leer los datos y Command para insertar, actualizar y borrar. Trabajar con operaciones en modo Desconectado significa que podemos trabajar con los datos en memoria sin tener la conexin a la base de datos abierta, lo que reduce al mximo el nmero de conexiones abiertas en la base de datos. Los controles DataSet y DataAdapter habilitan operaciones en modo Desconectado. El acceso a datos sin ADO.NET est dirigido hacia los sitios pequeos hechos por hobby o personales, que no requieren una encapsulacin total de los objetos de datos. ASP.NET posee dos tipos de controles de servidor que participan en el modelo de enlace a datos sin ADO.NET: controles de origen de datos y controles enlazados a datos. ASP.NET incluye controles de servidor por defecto como pueden ser: SqlDataSource, XmlDataSource. Un control enlazado a datos se conecta a una fuente de datos mediante su propiedad DataSourceID. Algunos de estos controles son: DropDownList, GridView, ListView, etc. El objetivo de LINQ es que el programador slo necesite conocer un lenguaje (C# o VB.NET) y pueda con l consultar y modificar los datos sin tener que preocuparse de si est trabajando con una base de datos, una coleccin de objetos en memoria, un archivo XML ObjectDataSource, AccessDataSource,

recuerde_

20

Directivas de pgina

ndice_
1. INTRODUCCIN ...............................................................................3 2. LA DIRECTIVA @PAGE ......................................................................3 3. LA DIRECTIVA @IMPORT ..................................................................6 4. LA DIRECTIVA @IMPLEMENTS ..........................................................7 5. LA DIRECTIVA @ASSEMBLY ..............................................................7

formacin digital

Directivas de pgina
1. INTRODUCCIN Una directiva es un identificador que incluimos en una nuestra pgina ASP.NET y que informa al entorno de ejecucin de ciertas caractersticas clave de dicha pgina, como el lenguaje en que est programada (recordemos que la plataforma .NET soporta varios lenguajes) o las libreras que se importarn. Es decir, mediante estas directivas podremos declarar una serie de atributos de la pgina ASP.NET actual, que tendrn repercusin a la hora de crearla. Estas directivas de pgina tienen el siguiente formato:

<%@ directiva atributo="valor" [atributo="valor"]%>

Lo primero que escribimos es el nombre de la directiva, seguida de una serie de pares atributo-valor que definen los datos relativos a cada una de las directivas. Estos pares atributo-valor van separados por el carcter espacio y el valor va entrecomillado. Por otra parte, podemos situar estas directivas en cualquier lugar de la pgina, pero por convencin, se suelen situar al principio del cdigo. Cada directiva comienza con el identificador <%@ y termina con %>. En los siguientes apartados vamos a ver las directivas disponibles en ASP.NET1.

2. LA DIRECTIVA @PAGE Esta directiva es la ms utilizada de todas y la que mayor nmero de atributos tiene. En cada pgina nicamente puede existir una directiva Page. Los valores principales que puede llevar esta directiva son los siguientes: AspCompat. El sistema ASP.NET guarda compatibilidad con ASP 3.0. Debemos poner este atributo a true para poder ejecutar DLL ActiveX desarrolladas para el sistema anterior de pginas ASP. Valores: true o false.

En la referencia general de MSDN podemos encontrar una descripcin completa de todas las directivas

en ASP.NET (http://msdn.microsoft.com/es-es/library/xz702w3e.aspx).

Directivas de pgina
Valor por defecto: false.

AutoEventWireup. Indica si los eventos de la pgina (UnLoad, Load, Init, etc.) se van a lanzar de forma automtica. Valores: true o false. Valor por defecto: false.

Buffer. Se utiliza para activar o desactivar el bfer de la pgina ASP.NET actual. ClassName. Contiene un valor de cadena que indica el nombre de la clase de la pgina actual.

ContentType. Contiene una cadena que describe el tipo MIME devuelto por la pgina. Esta informacin se enviar como cabecera HTTP al navegador. Habitualmente, este tipo ser text/html o text/plain.

EnableSessionState. Este atributo informa al sistema si esta pgina tendr acceso al sistema de gestin y mantenimiento de sesiones, es decir, si se permite o no la utilizacin de la propiedad Session de la clase Page. El valor ReadOnly indica que la pgina nicamente podr leer variables de sesin, pero no modificarlas ni crear variables nuevas. Valores: true, false o ReadOnly. Valor por defecto: true.

EnableViewState. Esta propiedad permite activar o desactivar el mantenimiento automtico de los valores de los controles web dentro de un formulario. Valores: true o false. Valor por defecto: true.

ErrorPage. Este atributo contiene la pgina de error que se va a utilizar en el caso de que se produzca una excepcin no tratada en la ejecucin de la pgina. Valores: URL de la pgina de error.

Directivas de pgina
CodeFile: este atributo se utiliza junto con el atributo Inherits para asociar un archivo de cdigo fuente subyacente a una pgina web. Este atributo slo es vlido para las pginas compiladas. Valores: nombre del archivo de cdigo fuente.

Inherits: con esta propiedad informamos al compilador de que la pgina actual hereda de la clase especificada. Valores: nombre de clase.

Language: Define el lenguaje en que est programada la pgina actual, siendo este al que se compilar todo el cdigo fuente de la pgina. Valores: vb, c# e identificadores de lenguajes compatibles con Microsoft .NET true o false. Valor por defecto: vb.

Src: este atributo contiene el nombre de un fichero que tiene cdigo que podr ser utilizado en la pgina (es una forma de separacin de cdigo, permite tener un bloque de cdigo en un fichero separado de la pgina ASP.NET).

WarningLevel: define el nivel de informacin que queremos utilizar al compilar nuestras pginas. Cuanto mayor nivel especifiquemos, ms estricto ser el compilador a la hora de informar sobre potenciales fallos de sintaxis o funcionamiento de nuestro cdigo fuente. Valores: de 0 a 4.

Ejemplo de uso de esta directiva:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="EjemploDatos1.aspx.cs" Inherits="_Default" %>

En este caso, hemos indicado que el lenguaje utilizado en el cdigo fuente de la pgina es C#, que los eventos de la pgina (UnLoad, Load, Init, etc.) se van a lanzar de forma automtica, que el nombre del archivo de cdigo fuente es EjemploDatos1.aspx.cs y que la pgina actual hereda de la clase _Default.

Directivas de pgina
3. LA DIRECTIVA @IMPORT Esta directiva la usaremos para importar de forma explcita un espacio de nombres (NameSpace) determinado y conseguir con ello tener acceso a todas las clases definidas en l. Este espacio de nombres puede ser propio de la plataforma .NET Framework, o bien un espacio de nombres definido por nosotros. nicamente podemos indicar un espacio de nombres por directiva Import, por lo que si queremos importar ms de un espacio de nombres, deberemos utilizar una directiva Import por cada uno. Su sintaxis es:

<%@ Import NameSpace="valor" %>

Por otra parte, el sistema importa automticamente una serie de espacios de nombres para las pginas ASP.NET, por lo que no tenemos que importarlas de forma explcita con la directiva Import, y tendremos acceso a todas sus clases: System System.Collections System.Collections.Specialized System.Configuration System.IO System.Text System.Text.RegularExpressions System.Web System.Web.Caching System.Web.Security System.Web.SessionState System.Web.UI System.Web.UI.HtmlControls System.Web.UI.WebControls

Directivas de pgina
4. LA DIRECTIVA @IMPLEMENTS Esta directiva nos permite implementar2 un interfaz determinado dentro de una pgina ASP.NET. Al igual que ocurra con la directiva anterior, si deseamos implementar varios interfaces en la pgina, debemos utilizar varias directivas Implements, una por cada interfaz. Su sintaxis es:

<%@ Implements Interface="nombreInterfaz" %>

5. LA DIRECTIVA @ASSEMBLY Esta directiva importa una librera DLL o Assembly dentro de nuestra aplicacin, haciendo visibles todos sus espacios de nombres y clases a nuestro cdigo. Normalmente, esta directiva no se utiliza, ya que cuando una librera DLL se encuentra en el directorio bin de la aplicacin web, no es necesario indicar dicha librera mediante la directiva Assembly, porque ya se encuentra disponible por encontrarse en este directorio especial. Si deseamos hacer referencia a varias libreras DLL, debemos utilizar una directiva por cada una. Esta directiva cuenta con los siguientes atributos: Name: especifica el nombre del assembly compilado (sin extensin). Src: especifica la ruta del fichero de cdigo fuente que define el assembly. En este caso, s debemos indicar la extensin correspondiente. El sistema compilar de forma dinmica el cdigo fuente en vez de encontrarse con el Assembly ya compilado. Ejemplo de su uso:

<%@ Assembly Name="Librera" %> <%@ Assembly Src="Librera.cs" %>

Implementar un interfaz significa dar contenido a sus mtodos, propiedades y eventos.

Directivas de pgina
Hemos visto las directivas @Page, @Import, @Implements y @Assembly. Las directivas son identificadores que suelen aadirse al principio de cada pgina ASP.NET y que informan al sistema de ciertas caractersticas clave de dicha pgina. Cada directiva puede contener uno o ms pares atributo-valor. Las directivas nos permiten especificar datos como el lenguaje en que est programada la pgina, tipo de acceso a las variables de sesin, tipo de contenido devuelto por la pgina, importacin de los espacios de nombres necesarios, etc.

recuerde_

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP

ndice_
1. EL FICHERO GLOBAL.ASAX ...............................................................3 1.1. EVENTOS DE SERVIDOR ...........................................................4 1.2. GESTIN DEL ESTADO DE LA APLICACIN ASP.NET .................5 2. EL FICHERO WEB.CONFIG.................................................................7 2.1. FORMATO DE LOS FICHEROS DE CONFIGURACIN ...................8 2.2. CONFIGURACIN GENERAL ......................................................9 2.3. CONFIGURACIN DE PGINA .................................................10 2.4. CONFIGURACIN DE LA SESIN ............................................11 3. EJEMPLO DE MANEJADOR HTTP ......................................................12

formacin digital

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


1. EL FICHERO GLOBAL.ASAX En la versin anterior del sistema de pginas activas ASP, disponamos de la opcin de utilizar el fichero GLOBAL.ASA. Este fichero estaba situado en el directorio raz de nuestro servidor web o de nuestro directorio virtual, y se ejecutaba al iniciarse nuestra aplicacin web. Este fichero se utilizaba para insertar en l el cdigo a ejecutar en los eventos de inicio y finalizacin de las distintas sesiones de usuario y de la aplicacin. En el nuevo sistema ASP.NET disponemos de un mecanismo similar, representado por el fichero GLOBAL.ASAX. En l se sigue un formato similar al de las pginas ASP.NET:

<%@ Application Language="C#" %>

<script runat="server"> [Mtodos para el tratamiento de eventos, inicializacin de objetos con mbito de Sesin y Aplicacin] </script>

En Visual Studio 2008 este fichero es opcional. Para agregarlo, pulsamos con el botn derecho del ratn encima del nombre del proyecto en la Ventana del Explorador de Soluciones. Seguidamente, hacemos clic en Agregar siguiente imagen: Nuevo Elemento... Por ltimo, en la ventana seleccionamos el elemento Clase de aplicacin global. Podemos verlo en la

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


1.1. EVENTOS DE SERVIDOR Los principales eventos que podemos tratar en el fichero GLOBAL.ASAX son: Application_OnStart: este evento se lanza cuando se inicia la ejecucin de la aplicacin ASP.NET correspondiente, y tiene lugar cuando el primer usuario carga una pgina ASP.NET perteneciente a la aplicacin. Dentro de este evento indicaremos el cdigo de inicializacin de la aplicacin. Application_OnEnd: es el evento contrario al anterior. Se lanza cuando finaliza la ejecucin de la aplicacin ASP.NET. Esta finalizacin de la ejecucin puede ocurrir por varios motivos: cuando termina la ltima de las sesiones de un usuario con la aplicacin, se apaga el servidor web o se modifica el cdigo fuente del fichero GLOBAL.ASAX (porque ello fuerza una compilacin del fichero). Dentro de este evento colocaremos el cdigo de limpieza de la aplicacin (como liberar los recursos utilizados) o que deba ejecutarse al finalizar nuestra aplicacin. Session_OnStart: este evento se lanza cuando se inicia una nueva sesin dentro de una aplicacin ASP.NET. El inicio de sesin se produce para cada usuario cuando solicita la primera pgina de la aplicacin. Puede usarse para inicializar las variables de sesin para el usuario, tales como identificacin, preferencias, etc. Estos valores permanecern disponibles mientras su sesin permanezca activa. Para que se produzca este evento, se debe haber lanzado previamente el evento Application_OnStart. Session_OnEnd: es el evento contrario al evento Session_OnStart. Se lanza cuando finaliza una sesin de usuario. Este hecho puede producirse porque haya caducado la sesin al permanecer inactiva el tiempo indicado en su propiedad Timeout, o bien porque se ha forzado mediante una llamada al mtodo Abandon() de la clase System.Web.SessionState.HttpSessionState (clase que representa la sesin de un usuario en la aplicacin ASP.NET). Si finaliza la ejecucin de la aplicacin, se ejecutarn todos los eventos Session_OnEnd de cada sesin de usuario antes de lanzarse el evento Application_OnEnd. Application_OnDisposed: este evento es lanzado cuando la aplicacin ASP.NET inicia su descarga de memoria y se producir antes del evento Application_OnEnd.

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


Los eventos Application_OnStart, Application_OnDisposed y Application_OnEnd se lanzan una nica vez durante toda la vida de la aplicacin ASP.NET, mientras que los eventos Session_OnStart y Session_OnEnd se ejecutarn repetidas veces, dependiendo de las sesiones que hayan iniciado los usuarios con la aplicacin ASP.NET. El esquema siguiente muestra el orden en que se producen los eventos que hemos visto y la circunstancia que provoca el lanzamiento de cada evento:

El primer usuario se conecta y solicita una pgina de la


Aplication_OnStart

aplicacin.

Un usuario inicia la aplicacin.


Session_OnStart

La sesin caduca.
Session_OnEnd

Se llama al mtodo Abandon() de Session.

Termina la ltima sesin con la aplicacin.


Aplication_OnDisposed

Finaliza el servidor web. Se modifica el fichero GLOBAL.ASAX.

Aplication_OnEnd

1.2. GESTIN DEL ESTADO DE LA APLICACIN ASP.NET La gestin del estado de la aplicacin ASP.NET consiste en la permanencia de objetos o valores a lo largo de la vida de la aplicacin y a lo largo de cada sesin de usuario en la aplicacin.

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


No se puede mantener el estado entre diferentes pginas web a travs del protocolo HTTP1. No obstante, ASP.NET nos permite almacenar informacin entre diversas solicitudes de pginas dentro de una aplicacin a travs de los objetos Session y Application2. Estos objetos integrados se encuentran en las dos propiedades del mismo nombre del objeto Page (que representa a una pgina ASP.NET), y tambin en la clase HttpApplication (que representa a una aplicacin ASP.NET), a travs de las propiedades Application y Session: El objeto Session: nos permite almacenar el estado de cada usuario que ha iniciado una sesin con la aplicacin. Esta informacin se mantendr a lo largo de toda la vida de cada sesin particular para cada usuario, es decir, cada usuario tendr sus variables y sus valores. Este objeto es una instancia de la clase System.Web.SessionState.HttpSessionState. La sintaxis para almacenar un objeto en el objeto Session y recuperarlo es:

Session["CadenaClave"] = objeto; Objeto = Session["CadenaClave"];

El objeto Application: hace posible almacenar la informacin que es comn para toda la aplicacin. Las variables almacenadas dentro de estos objetos son accesibles a todos los usuarios que estn utilizando la misma aplicacin ASP.NET en cualquiera de sus pginas. En contraposicin al objeto Session, cuyas variables son particulares para cada uno de los usuarios conectados, no se comparten y son propias de la sesin de cada uno. Este objeto es una instancia de la clase System.Web.HttpApplicationState. El

almacenamiento de los objetos se basa en una estructura en forma de pares clave/valor, como en el objeto Session. As, la sintaxis para almacenar objetos en el estado de la aplicacin y recuperarlos es:

Application["CadenaClave"]=objeto; objeto= Application ["CadenaClave"];

1 2

Protocolo sobre el que se apoya el sistema ASP.NET, ya que es un protocolo sin estado. Estos objetos ya se encontraban disponibles en la versin anterior de ASP.

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


2. EL FICHERO WEB.CONFIG En las versiones anteriores de ASP, la configuracin de las aplicaciones web se realizaba a travs del administrador de servicios de Internet y la informacin relativa a la configuracin de las aplicaciones ASP se almacenaba en el repositorio binario denominado metabase del Internet Information Server. Este sistema de configuracin de las aplicaciones web basado en el servidor Web IIS ya no es vlido para las aplicaciones ASP.NET. La configuracin de las aplicaciones ASP.NET se basa en ficheros XML, es decir, se utilizan ficheros XML de configuracin. Este nuevo sistema presenta las siguientes ventajas: Valores de configuracin en formato reconocible. Podemos abrir el fichero XML y leer y modificar los valores de configuracin que contiene. Actualizaciones inmediatas. Los cambios en los ficheros de configuracin se toman de forma inmediata y automtica en el sistema sin necesidad de reiniciar el servidor web o para los servicios. Portabilidad de las configuraciones. Para tener una aplicacin ASP.NET en un servidor con la misma configuracin que otra aplicacin distinta, nicamente es necesario copiar los ficheros XML de configuracin a la aplicacin correspondiente. Bloqueo de valores de configuracin. Es posible bloquear los valores de configuracin que no deban ser sobrescritos. Existen dos tipos de ficheros de configuracin: Configuracin del servidor. Esta configuracin se almacena en un fichero denominado machine.config, que se encuentra en el directorio: Windows\Microsoft.NET\Framework\[versin]\config3

Este fichero representa la configuracin por defecto de todas las aplicaciones ASP.NET existentes en el servidor.

Lo encontraremos en la carpeta de la versin 2.0 de .NET Framework.

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


Configuracin de la aplicacin. La informacin de configuracin relativa y especfica a una aplicacin ASP.NET se encuentra en el fichero web.config de su directorio raz. Puede haber otros ficheros web.config dentro de una misma aplicacin, en otros directorios ms anidados. La configuracin del fichero web.config sobrescribe los valores especificados en el fichero machine.config y, a su vez, cada fichero web.config sobrescribir los valores de configuracin utilizados en los ficheros web.config de directorios superiores (a no ser que dichos valores se hayan bloqueado para evitar ser sobrescritos). 2.1. FORMATO DE LOS FICHEROS DE CONFIGURACIN Los dos ficheros de configuracin para una aplicacin ASP.NET, machine.config y web.config, se diferencian nicamente en el nombre (adems de su localizacin como hemos visto), ya que internamente presentan el mismo formato XML. Debemos tener en cuenta que el sistema de configuracin de ASP.NET distingue entre maysculas y minsculas. Cada fichero de configuracin contiene una jerarqua anidada de etiquetas y subetiquetas XML con atributos que especifican los valores de configuracin. Las etiquetas deben encontrarse bien construidas y siguen el siguiente criterio: Los nombres de etiquetas y atributos comienzan con letra minscula y la primera letra de cada una de las siguientes palabras que forman el nombre van en mayscula. Los valores de los atributos de las etiquetas comienzan siempre por mayscula y la primera letra de cada una de las siguientes palabras que la formen van tambin en mayscula. Existe una excepcin, los valores true y false se escriben con todas las letras en minsculas. Dentro de los ficheros de configuracin, el elemento raz es siempre la etiqueta <configuration>. Dentro de este elemento, entre sus etiquetas de comienzo y fin, aparecern las distintas secciones de configuracin para aplicar a la aplicacin ASP.NET:

<configuration> <!Configuracin para aplicar a la aplicacin ASP.NET </configuration> -->

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


En el siguiente apartado veremos las secciones principales y ms comunes en la configuracin de una aplicacin ASP.NET. 2.2. CONFIGURACIN GENERAL Esta seccin se encuentra en la etiqueta <httpRuntime>. En ella podemos indicar una serie de parmetros de configuracin genricos para la aplicacin ASP.NET. Los atributos que contiene esta etiqueta son: executionTimeout: en este atributo indicaremos el tiempo de espera en segundos que se aplicar a la ejecucin de un recurso solicitado. Si se supera este tiempo de espera, la aplicacin ASP.NET finalizar la ejecucin del recurso. El valor por defecto que presenta este atributo es de 90 segundos. maxRequestLength: este atributo muestra el tamao mximo de una peticin. Se expresa en KB y, por defecto, presenta el valor de 4096 KB. userFullyAQualifiedRedirectUrl: indica cmo se le va a devolver una URL al cliente, completa o relativa. Puede tomar los valores true o false, aunque por defecto tiene el valor false, por lo se enviar una ruta relativa. El cdigo siguiente muestra los valores que presenta por defecto esta seccin en el fichero machine.config (y que sern aplicables a todas las aplicaciones ASP.NET del servidor, si no son sobrescritos en algn fichero web.config de la aplicacin correspondiente):

<configuration> <system.web> <httpRuntime executionTimeout ="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl ="FALSE" /> </system.web> </configuration>

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


2.3. CONFIGURACIN DE PGINA En el presente apartado estudiaremos la etiqueta <pages>, donde podemos controlar algunos de los comportamientos de las pginas ASP.NET. Veamos sus principales atributos: autoEventWireup: indica si los eventos de la pgina (Load, Init, UnLoad, etc.) se van a lanzar de forma automtica. Puede tomar los valores true o false. Por defecto tiene el valor true, por lo que estos eventos de la clase Page (que representa una pgina ASP.NET), se lanzarn automticamente. buffer: se utiliza para activar o desactivar el bfer de las pginas ASP.NET de la aplicacin actual. Puede tomar los valores true o false. Por defecto tiene el valor true, con lo que ASP.NET ejecuta por completo las pginas antes de enviar algo del resultado al usuario (el contenido del bfer no es enviado al navegador hasta que no se haya terminado de ejecutar la pgina). enableSessionState: permite activar o desactivar el estado de sesin a travs del objeto Session (posibilita almacenar informacin comn a la sesin actual del usuario en la aplicacin web). Puede tomar los valores true, false o readOnly (con este valor, las pginas podrn leer variables de sesin pero no modificarlas ni crear nuevas variables). Por defecto tiene el valor true. enableViewState: con este atributo podemos activar o desactivar el mantenimiento automtico de los valores de los controles web dentro de los formularios web. Por defecto tiene el valor true, por lo que los controles web mantienen su estado entre distintas recargas del formulario web. Estos atributos se corresponden con los atributos del mismo nombre de la directiva @Page, por lo que podemos sobrescribir estos valores de configuracin de la aplicacin para una pgina ASP.NET en concreto, usando en ella esta directiva. Un ejemplo de uso de la etiqueta <pages> en un fichero de configuracin podra ser:

<configuration> <system.web> <pages buffer="true" enableSessionState="true" autoEventWireup="true"/> </system.web> </configuration>

10

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


Por ltimo, si en el fichero web.config de una aplicacin concreta deseamos sobrescribir alguno de los valores anteriores, por ejemplo, el uso del buffer, slo tenemos que incluir la etiqueta <pages> con el atributo a sobrescribir:

<configuration> <system.web> <pages buffer="true"/> </system.web> </configuration>

2.4. CONFIGURACIN DE LA SESIN Podemos configurar el estado de sesin mediante la etiqueta <sessionState>. Sus atributos ms comunes son: cookieless: este atributo indica si el objeto Session utilizar el mecanismo de cookies para almacenar el identificador de sesin. Puede tomar los valores true o false. Por defecto tiene el valor false, por lo que ASP.NET se apoyar en las cookies para mantener la sesin. Cuando tiene el valor true, la sesin se mantiene a travs del mecanismo de URL (el identificador de la sesin se aade a la ruta de las pginas ASP.NET solicitadas). Timeout: este atributo indica el intervalo de tiempo en minutos de inactividad para el objeto Session. Esta inactividad significa que si el usuario no actualiza o solicita una pgina durante ese tiempo, la sesin termina. Por defecto presenta el valor de 20 minutos. Tambin podemos modificar este valor en la aplicacin a travs de la propiedad Timeout del objeto Session. Por ejemplo, para aumentar el timeout de la sesin hasta 30 minutos y evitar el uso de cookies para mantener la sesin, tendramos la siguiente configuracin:

<configuration> <system.web> <sessionState cookieless="true" timeout="30"/> </system.web> </configuration>

11

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


3. EJEMPLO DE MANEJADOR HTTP Los mdulos HTTP son los responsables de filtrar cada solicitud/respuesta en una aplicacin ASP.NET. As, por ejemplo, son quienes determinarn si una solicitud determinada debera ser servida al cliente desde la cach, o bien ser dirigida al manejador HTTP correspondiente. Esta seccin se encuentra en la etiqueta <httpModules> de los ficheros de configuracin web.config. Los manejadores HTTP son los encargados de servir las peticiones de una extensin particular dentro de ASP.NET, como puede ser la extensin de las pginas .aspx. Se encuentran en la seccin <httpHandlers> de los ficheros de configuracin XML. Dentro de esta seccin podemos aadir manejadores personalizados o bien eliminar manejadores existentes. Esto es posible porque ASP.NET se basa en una arquitectura ampliable denominada entorno de ejecucin HTTP. En el fichero web.config se indica una serie de manejadores HTTP, los bsicos para ASP.NET, que tomarn todas las aplicaciones del servidor web. Los ms comunes que podemos encontrar son los manejadores para pginas ASP.NET (extensin .aspx), para controles de usuario (extensin .ascx) y ficheros de configuracin (extensin .config). Para indicar estos manejadores, usaremos la subetiqueta <add> de la etiqueta

<httpHandlers>. Esta etiqueta tiene los siguientes atributos: verb: contiene el tipo de verbo HTTP correspondiente al manejador que va a procesar la peticin. Estos valores pueden ser: Get, Head, Post, etc. El carcter asterisco (*) para indicar que el manejador tratar todos los verbos o acciones del protocolo HTTP. path: en este atributo indicamos la ruta del recurso que se debe tratar. Tambin acepta el carcter especial de asterisco, que generalmente se utiliza seguido de la extensin de los ficheros a tratar. type: especifica la combinacin clase/ensamblado separados por comas que implementa el manejador HTTP. En nuestro caso no usaremos assembly ya que cuando aadamos la clase manejador a nuestro proyecto le indicaremos que nos la guarde en el directorio

12

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


App_Code; esto har que baste con incluir el nombre de la clase sin necesidad de indicar assembly. Por otra parte, podemos aadir nuestros propios manejadores incluyendo una nueva etiqueta <add> en la seccin de los manejadores http (httpHandlers del fichero Web.config), que haga referencia a la clase que implementa nuestro manejador. La nueva clase (p.ej. miManejador.cs) que realizar las funciones de un manejador HTTP, debe implementar el interfaz System.Web.IHttpHandler. Este interfaz contiene el mtodo ProcessRequest(), que ser el mtodo responsable de procesar la solicitud que se ha asociado con el manejador. Tambin es necesario implementar la propiedad IsReusable, de slo lectura, y que simplemente devuelve el valor true. En este ejemplo, el mtodo ProcessRequest() generar cdigo HTML sencillo, que presentar una cadena de texto con un saludo.

using System; using System.Web;

namespace Componentes.Pruebas

{ {

public class miManejador:IHttpHandler

public void ProcessRequest (HttpContext entorno) { HttpResponse respuesta=entorno.Response; respuesta.Write("<html><body><h2>"); respuesta.Write("Saludos); respuesta.Write("</h2></body></html>"); } public bool IsReusable { get { return true; } } } }

13

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


El cdigo que debemos incluir en el fichero web.config sera:

<configuration> <system.web> <httpHandlers> <add verb="*" path="pruebaManejador.aspx" type="Componentes.Pruebas.miManejador"/> </httpHandlers> <httpModules> </httpModules> </system.web> </configuration>

En este ejemplo, la clase del manejador es miManejador (que incluimos aadiendo un nuevo elemento clase al proyecto) y se encuentra en el espacio de nombres Componentes.Pruebas. Adems, la pgina .aspx la llamaremos pruebaManejador.aspx. Por ltimo, si solicitamos la pgina pruebaManejador.aspx, sera la clase del manejador (miManejador) la que atendera la solicitud y mostrara una pgina con el mensaje Saludos.

14

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP


En ASP.NET disponemos del fichero GLOBAL.ASAX, de propsito similar al GLOBAL.ASA de ASP. Se encuentra situado en el directorio raz de nuestro servidor web o de nuestro directorio virtual, y se ejecuta al iniciarse nuestra aplicacin web. En el fichero GLOBAL.ASAX se incluye el cdigo para el tratamiento de los eventos Application_OnStart, Application_OnEnd, Session_OnStart, Session_OnEnd y Application_OnDisposed y el cdigo de inicializacin de objetos con mbito de Session y Application. La configuracin de las aplicaciones ASP.NET se basa en los ficheros XML web.config y machine.config. Estos ficheros de configuracin contienen una jerarqua anidada de etiquetas y subetiquetas XML con atributos que especifican los valores de configuracin. Se distingue entre maysculas y minsculas. Los cambios en los ficheros de configuracin se toman de forma inmediata y automtica en el sistema sin necesidad de reiniciar el servidor web o para los servicios. Podemos configurar el tiempo de ejecucin de un recurso, el timeout de la sesin, el uso de cookies para mantener la sesin, activar el uso del buffer, el mantenimiento automtico del estado de los controles web, etc. Los mdulos HTTP son los responsables de filtrar cada solicitud/respuesta en una aplicacin ASP.NET. Se indican en la etiqueta <httpModules> del fichero de configuracin XML web.config. Los manejadores HTTP son los encargados de servir las peticiones de una extensin particular dentro de ASP.NET, como puede ser la extensin de las pginas .aspx. Se encuentran en la seccin <httpHandlers> del fichero de configuracin XML web.config. Podemos aadir nuestros propios manejadores incluyendo una nueva etiqueta <add> en la seccin de los manejadores HTTP, que haga referencia a la clase que implementa nuestro manejador.

recuerde_

15

Los ficheros GLOBAL.ASAX y WEB.CONFIG. Ejemplo de manejador HTTP

recuerde_

La clase del manejador HTTP debe implementar la propiedad IsReusable y el mtodo ProcessRequest() del interfaz System.Web.IHttpHandler.

16

glosario_

A ASP (Active Server Pages). Pginas activas del servidor Internet Information Server. ASP es la versin anterior a la tecnologa ASP.NET de Microsoft. API (Application Programming Interface Interfaz de programacin de aplicaciones). Es el conjunto de funciones y procedimientos que ofrece una biblioteca especfica para la comunicacin entre componentes software. ATL. (Active Template Library). Es una librera basada en templates, que se cre para realizar controles y libreras ActiveX (COM) de bajo peso. El excesivo peso que MFC aada a los ActiveX perjudicaba su distribucin desde Internet. C CLR (Common Language Runtime). Motor de ejecucin comn incluido en el paquete Microsoft .NET. Cookie. Archivo creado por un sitio de Internet para almacenar informacin en el ordenador, como por ejemplo, las preferencias de visitas a un sitio determinado. As, cuando visitamos un sitio que utiliza cookies, el sitio puede pedirle a Firefox que guarde una o ms cookies en el disco duro. CSS (Cascading Style Sheets - Hojas de Estilo en Cascada). Se utilizan para dar formato a documentos HTML o XML, separando los datos del formato de presentacin. CTS (Common Type System). Especificacin de tipos bsicos para la integracin de distintos lenguajes de programacin en Microsoft .NET (como C#, Visual Basic .NET, JScript, .NET). C#. Lenguaje creado por Microsoft para su plataforma .NET. Es parecido a C++ y Java. D DHTML (Dinamic HTML - HTML dinmico). Se forma de una conjuncin de HTML, hojas de estilo en cascada (CSS) y lenguajes de Script como JavaScript o VBScript. DLL (Dynamic Link Library - Bibliotecas de Enlace Dinmico). Es un archivo que contiene funciones que se pueden llamar desde aplicaciones u otras DLL. Los desarrolladores utilizan las DLL para poder reciclar el cdigo y aislar las diferentes tareas. Las DLL no pueden ejecutarse directamente, es necesario llamarlas desde un cdigo externo. Las DLL de Windows permiten que las aplicaciones puedan operar en el entorno de Windows.

glosario_

F Framework (Marco de trabajo). Es un esquema o estructura que puede incluir soporte de programas, bibliotecas y un lenguaje interpretado para la organizacin, desarrollo y/o la implementacin de una aplicacin. H HTML (HiperText Markup Language). Lenguaje para la creacin de pginas web relacionadas entre s por hipertexto. HTTP (HiperText Transport Protocol). Protocolo de comunicaciones utilizado por los navegadores de Internet para el acceso a recursos web, como ficheros de imgenes, vdeo, pginas HTML, pginas ASP, pginas ASPX, etc. I IIS (Internet Information Server). Es el servidor web de Microsoft. ASP.NET funciona sobre IIS 5.0. J Java. Lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems. JavaScript. Lenguaje de Script desarrollado por Netscape y utilizado en los navegadores de Internet. J2EE (Java 2, Enterprise Edition). Modelo de desarrollo y aplicacin propuesto por SUN y basado en el desarrollo de componentes Java. JSP (Java Server Pages). Solucin de SUN Microsystems para el desarrollo de aplicaciones web. Se basan en la especificacin de Servlets de SUN. M MDAC (Microsoft Data Access Components). Componentes Microsoft de acceso a datos. MFC (Microsoft Fundation Classes). Librera basada en jerarqua de clases. Bsicamente encapsula el API de Windows en una forma orientada a objetos. MSIL. Lenguaje intermedio para la ejecucin de aplicaciones en Microsoft .NET.

glosario_

O ODBC (Open Database Connectivity). Es un estndar de acceso a bases de datos que utilizan los sistemas Microsoft. A travs de ODBC, un sistema Windows se puede conectar con cualquier base de datos de la que exista un driver ODBC. OleDb (Object Linking and Embedding for Databases). Enlace e incrustacin de objetos para bases de datos. Permite el acceso a datos almacenados en cualquier formato (bases de datos, hojas de clculo, archivos de texto, etc.) para el que haya un proveedor OLE DB disponible. P PHP (Personal Home Page - Procesador de Hipertexto). Las pginas PHP presentan una tcnica similar a las pginas ASP de Microsoft, es decir, las pginas HTML incluyen el cdigo PHP embebido en ellas y al ejecutarlas, se genera cdigo HTML dinmicamente. Proceso de negocio. Es un conjunto de tareas relacionadas lgicamente, que toman uno o ms tipos de entradas (Inputs), llevadas a cabo para lograr un resultado de negocio definido (Outputs). Tambin puede verse como un conjunto de actividades que colectivamente consiguen alcanzar un objetivo de negocio. Es, por ejemplo, el proceso a travs del cual una organizacin ofrece sus servicios a sus clientes. R RAD (Rapid Application Development - Desarrollo rpido de aplicaciones). Es un proceso de desarrollo de software desarrollado inicialmente en 1980. Tiende a englobar la usabilidad, la utilidad y la rapidez de ejecucin. RIA (Rich Internet Applications - Aplicaciones de Internet Enriquecidas). Son un nuevo tipo de aplicaciones con ms ventajas que las tradicionales aplicaciones web. Esta surge como una combinacin de las ventajas que ofrecen las aplicaciones web y las aplicaciones tradicionales. S Script. Es un guin o conjunto de instrucciones. Permiten la automatizacin de tareas creando pequeas utilidades. SDK (Software Development Kit - Kit de desarrollo de software). Es un conjunto de herramientas de desarrollo que le permite a un programador crear software.

glosario_

SQL (Structured Query Language - Lenguaje de consulta estructurado). Es un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje (ASP.NET, PHP) en combinacin con cualquier tipo de base de datos (MS Access, SQL Server, MySQL...). V VBScript (Visual Basic Script). Lenguaje de Script desarrollado por Microsoft. X XML (eXtensible Markup Language - Lenguaje de marcado extensible). Se utiliza para la construccin de documentos de datos estructurados multi-propsito.

referencias web_

Informacin y recursos para crear pginas web ASP.NET Referencia completa de todas las directivas en ASP.NET. Blog sobre ASP.NET Pgina ASP.NET con recursos

http://msdn.microsoft.com/es-es/library/fddycb06.aspx

http://msdn.microsoft.com/es-es/library/xz702w3e.aspx http://www.asp.net/es/aprender/

formativos, ejemplo, etc. de

http://www.elguille.info/NET/ASPNET/Default.aspx

bibliografa_

Esposito, Liberty,

Dino. Jesse;

Programming Horovitz, Alex.

Microsoft

ASP.NET .NET

3.5. 3.5.

Microsoft OReilly

Press. Media.

Washington. 2008. Programming Gravenstein Highway North, Sebastopol. 2008. MacDonald, Matthew. Beginning ASP.NET 3.5 in C# 2008: From Novice to Professional. United States of America. 2007. MacDonald, Matthew Szpuszta, Mario. Pro ASP.NET 3.5 in C# 2008. Apress. United States of America. 2007. Mayo, Joe. C# 3.0 Unleashed With the .NET Framework 3.5. Pearson Education. United States of America. 2008. Solis, Daniel. Illustrated C# 2008. Apress. United States of America. 2008.

Вам также может понравиться