Capitulo 1: Comprender Microsoft Web Technologies En un principio, la World Wide Web (WWW) era plana. La World Wide Web es una biblioteca electrónica en donde los académicos y científicos contabilizaban sus disertaciones y datos polvorientos para la lectura rudimentaria, que era solo texto en los primeros navegadores. Con la llegada de los exploradores graficos, despegó la Web orientada al consumidor. El contenido se convirtió en algo totalmente colorido. Alguien recuerda que hermosos momentos pasó con el inolvidable <blink> y <marquee>, esas hermosas etiquetas que utilizábamos en HTML con nuestro sencillo Bloc de notas (Muchos como yo queremos olvidar esas etiquetas, pues me tenían loco cada vez que terminaba una pagina y no salía lo que quería, muchos errores). En fin, la Web ha evolucionado como un medio rico, interactivo y personalizado. En la nueva versión de la Web llamado Web 2.0, las páginas funcionales no logran llenar la aceptación del público. La experiencia del usuario es muy encendida y los sitios son frescos. En este capitulo se mirará a las herramientas y tecnologías Microsoft para crear y entregar participación para el contenido Web. 1.1 Introducción a las herramientas de Contenido y Creación Microsoft posee una gran gama de herramientas para la creación de páginas Web que atraen a varios niveles de habilidad. Existen lógicamente algunas herramientas que son más adecuadas para el diseño de página Web y otras más apropiadas para la programación. 1.1.1 Microsoft Office Cuando Microsoft se dió cuenta que estaba ganando terreno en el mundo de Internet, los texto pasaron a integrar un apoyo en la Web para los productos. Por ello ahora se pueden guardar páginas Web desde hojas de Excel, Documentos de Word y Diapositivas de PowerPoint. Muchas empresas utilizan la suite de Microsoft Office para colocar archivos en la intranet porque los empleados se sienten muy cómodos trabajando con productos como Excel o Word. Estas aplicaciones son muy amigables y recomendables para trabajar con contenido Web estático. Aunque estos son un poco inflados (por el código que se crea) generalmente las paginas son fieles reproducciones del documento original. En especial, cuando se utiliza el más reciente navegador de Microsoft, nos referimos a Internet Explorer. No existe nada ni nadie quien pueda parar que los usuarios utilicen Archivo>Guardar como: HTML, en un sitio con ASP.NET. Sin embargo, usted puede encontrarse que el quitar código no deseado en HTML toma más tiempo y es mas dificultoso que iniciar una pagina desde cero. 1.1.2 Expression Web Expression Web tomó el lugar de nuestro añorado y buscado (por algunos) Microsoft Office FrontPage como el editor de contenido de paginas Web para diseñadores con años de experiencia. Aunque muchos usuarios ven a Expression Web como un procesador de textos un poquito avanzado y mejorado, puedo decir que Expression es mucho más que eso, ya que posee herramientas muy importantes que ayudarán en su trabajo a los diseñadores de páginas Web. Estas herramientas incluyen Gestión de archivos, Comprobación de vínculos, edición de estilos y soporte para arrastrar y colocar controles HTML y ASP.NET. Expression Web ha heredado el excelente modo de trabajo de Microsoft Office FrontPage, la vista dividida, el cual se puede trabajar en modo gráfico y en modo código al mismo tiempo. Otra característica hace que Microsoft extraiga el editor HTML de Visual Web Developer que sustituyó la versión superior (Expression\FrontPage) 1.1.3 Expression Blend Expression Blend es principalmente hecho para el conjunto de usuarios que utilizan el modo artístico (especialmente los que utilizan MAC) para crear gráficos vectoriales, animados y tridimensionales, como lo hacen los diseñadores que utilizan PhotoShop. Expression Blend posee una inmensa variedad de herramientas, como conjuntos de pinceles, paletas, rellenos, textos, degradados y muchas cosas más para los usuarios que pueden obtener una gran ventaja con estas herramientas. Los archivos basados en XML que genera Expression Blend, trabaja con aplicaciones Windows Presentation Fundation (WPF) que se ejecutan en Windows y en plataformas cruzadas en aplicaciones SilverLight para la Web. La interfaz de usuario de Expression Blend es tenue y fúnebre, muy lejos de la hermosa interfaz de Windows XP o Windows Vista. En teoría, la interfaz de Expression Blend es un ambiente de diseño monótono, plano, sin distracciones para un artista con su lienzo de dibujo. 1.1.4 Visual Web Developer Visual Web Developer (VWD) es la principal herramienta para la programación de sitios Web para plataformas Microsoft. Al igual que Microsoft Office Word, que pertenece a la suite de Office, Visual Web Developer pertenece a la inmensa suite de Visual Studio 2008. Visual Studio incluye Visual Basic.NET, Visual C# y muchas otras herramientas. Como ya muchos sabemos, Microsoft siempre trata de acaparar el mercado y presenta varias versiones de Visual Studio, por ejemplo, una versión especializada para desarrolladores, diseñadores de Base de datos, para testers e ingenieros de sistemas. Como un entorno de desarrollo integrado (IDE), Visual Web Developer le ayuda a construir y ensamblar los elementos claves en aplicaciones Web, incluyendo paginas Web, imágenes, controles, base de datos, hojas de estilos, y por obvias razones, la lógica de programación. Visual Web Developer Express (VWDE), es un poco discriminado por algunos usuarios por experiencia, ya que es la versión gratuita para algunos principiantes y los aficionados (como yo, jejeje). Figura 1. 1 Visual Web Developer Express no admite complementos, control de código fuente, extensibilidad o macros, que son características que un desarrollador profesional espera como herramientas. Muchas de las instrucciones que se brindarán en este libro, puede ser utilizado en Visual Web Developer y en Visual Web Developer Express. Usted puede realizar casi cualquier instrucción de este libro, utilizando la versión libre. 1.2 Reuniendo las tecnologías detrás de las aplicaciones Web Las tecnologías que apoyan las aplicaciones W eb provienen de diferentes organizaciones y de diferentes equipos dentro de Microsoft. Ahora encontraras un panorama general, de las partes que se conectan entre si. 1.2.1Microsoft.Net FrameWork 3.5 Microsoft .NET Framework versión 3.5. .NET Framework es un componente integral de Windows que admite la creación y la ejecución de la siguiente generación de aplicaciones y servicios Web. Los componentes clave de .NET Framework son Common Language Runtime (CLR) y la biblioteca de clases .NET Framework, que incluye ADO.NET, ASP.NET, formularios Windows Forms y Windows Presentation Foundation (WPF). .NET Framework proporciona un entorno de ejecución administrado, un desarrollo e implementación simplificada y la integración con una gran variedad de lenguajes de programación. Los Geeks hacen referencia a las clases o bibliotecas de clases que componen .NET Framwork. Ellos utilizan nombres como System.Web, System.Data y System.xml.LinQ. Estas referencias les servirán como material que le muestra que es una manera simple de organizar y clasificar miles de fragmentos de código pre escritos que los desarrolladores pueden aprovechar a través de lenguajes de programación como C#, C++ y Visual Basic. 1.2.2 ASP.NET 3.5 ASP.NET 3.5 es una tecnología que ofrece aplicaciones Web interactivas controlada por datos a través de Internet o una Intranet. ASP.NET 3.5 incluye un gran número de controles pre compilados, tales como cuadros de texto, botones, imágenes, cuadriculas, el cual puede ensamblar, manipular y configurar el código para crear paginas HTML que aparecen correctamente en todos los navegadores populares, especialmente Internet Explorer. Cuando se combina la programación lógica, ASP.NET le permite enviar código HTML que en circunstancias es específico para cada usuario. 1.2.3 ASP.NET podría haber sido XSP.NET En lugar de ASP.NET la tecnología se convirtió casi en XSP.NET. En una entrevista con el Microsoft Architec Journal. Scott Guthrie quienes ayudaron a establecer Microsoft core Web Technologies, recuerda esta cuestión de nomenclaturas. Originalmente lo llamaron XSP, y la gente siempre pide lo que la X representaba. XML inicia con XSLT lo que originalmente trató de ponerse la X. Anteriormente los desarrolladores de ASP.NET y muchos de nosotros aprendimos a construir sitios con Active Server Pages, primera plataforma de encriptación Web de Microsoft. ASP (actualmente llamado ASP classic) Obtuvo este nombre en Microsoft “Active” como en la fase de AcitveX, Active Desktop y Active DIrectory. A diferencia de las páginas estáticas HTML, que se almacenan en el disco de modo completo, las paginas ASP.NET generalmente existen en un estado similar al esqueleto en el disco. Esto es solo cuando un usuario solicita una pagina ASP.NET que analiza las marcas, rellena todo el contenido (generalmente una base de datos) y envía HTML que el navegador pueda procesar. 1.2.4 ASP.NET Extensions El equipo de ASP.NET continua agregando controles entre los lanzamientos oficiales. Estos son paquetes como extensiones que usted puede descargar e instalar. Las extensiones ASP.NET 3.5 incluyen controles Silverlight y MediaPlayer para la presentación de medios enriquecidos en paginas ASP.NET. Otras extensiones y plantillas incluidas los controles Dynamic Data para mostrar contenido de Base de datos y una avanzada arquitectura FrameWork llamada Model View Controller (MVC) Microsoft tiene muchos términos para un programa no terminado, tales como alpha, beta, vista previa, vista previa de comunidades técnicas (CTP). Criticas para su uso en producción, debe verificar que una extensión ASP.NET este hecho para ser lanzado a la Web (RTW) o lanzado como etapa de manufactura (RTM). 1.2.5 Web Services Los servicios Web permiten enviar datos y cálculos a equipos remotos sin restringir su base de clientes a los que Windows está ejecutando. El formato de intercambio más popular es el Protocolo simple de acceso a objetos (SOAP) que permite a diferentes plataformas comunicarse entre si mediante el uso de XML. Microsoft ha puesto un gran impulso en Web Services vía ASP.NET en anteriores lanzamientos de .NET. El énfasis de la atención ha sido sobre servicios que utilizan Windows Comunication Foundation (WCF) Los servicios WCF están mas robustos y fáciles de proteger, especialmente para aplicaciones empresariales donde se puedan compartir datos de asistencia sanitaria con una empresa que se encarga de facturar. Los Sitios Web pequeños también poseen algunas utilizaciones interesantes para los servicios, especialmente cuando se enganchan con tecnologías como ASP.NET AJAX. 1.2.6 JavaScript y el código lado del cliente Modernos navegadores entienden un lenguaje de programación interno llamado JavaScript. Cuando el navegador encuentra código JavaScript (script en geekspeak) interno en una pagina HTML, se ejecuta las instrucciones del programa. EL navegador (el cliente) no necesita una conexión para el servidor para ejecutar código JavaScript, esto es completamente independiente. Los script lado del cliente utiliza la potencia del procesamiento del equipo en el cual el navegador es ejecutado. Esto es tremendamente ventajoso porque tarda la presión en el servidor Web y distribuye tareas individuales. Las secuencias de comandos en el lado del cliente se hacen complicadas y extremadamente potentes cuando combina con la lógica en el servidor. Imagínese este escenario: El servidor Web envía una secuencia HTML que contiene instrucciones JavaScript. Estas instrucciones incluyen código JavaScript que verifica si el usuario anónimo tiene escrito números desde 1 hasta 10 en un cuadro de texto. El navegador ve los scripts y ejecuta localmente. Hasta que el usuario tenga escrito un número desde 1 hasta 10, el servidor Web no se encuentra involucrado. Cuando el navegador envía los números de regreso al servidor Web, la acción de regreso es conocida como PostBack. 1.2.7 ASP.NET AJAX Asíncrono de Java Script y XML (AJAX). Es una tecnología que reduce el despilfarro innecesario de completas páginas que se actualizan por limite de transferencia de datos para y desde el servidor Web. En una pagina habilitada con AJAX, puede escribir su número de tarjeta de crédito en un cuadro de texto, clic en el boton Enviar, y tiene una respuesta tal como “Tarjeta de crédito Aceptada” sin Alterar la imágenes, menús, y textos en otros lugares en la página. El navegador envía los datos requeridos a el servidor. Cuando los mensajes vienen de regreso, AJAX utiliza código JavaScript y HTML Dinámico para escribir dentro de la parte designada de la pagina. El gusto de Microsoft sobre AJAX es que es una parte integral de ASP.NET 3.5 en lugar de un add-on de versiones anteriores. Como resultado, si un error o defecto de seguridad existen, Microsoft puede corregir los códigos AJAX via Actualizaciones automáticas o durante el mes de celebración conocido como “Martes de Parches” (Algo que Microsoft siempre hace) 1.2.8 HTML Dinámico Si bien no es una tecnología exclusiva de Microsoft, HTML Dinámico (DHTML) juega un rol importante en hacer páginas Web de respuesta, interactiva y más como un programa regular de Windows. Cuando el navegador analiza el código HTML para una pagina, este crea un documento en memoria. Estos documentos tienen una estructura jerárquica cuando elementos secundarios anidan dentro de sus contenedores padres. Por ejemplo, las filas de una tabla son anidadas dentro de una tabla que son anidadas con el cuerpo del documento. La palabra dynamic (dinamico) en DHTML se refiere a la habilidad de cambiar las características de un elemento utilizando JavaScript. Usted ha visto estas habilidades muchas veces sin necesidad de prestar atención. Por ejemplo, usted ve el trabajo de DHTML cuando pasa el mouse sobre una imagen y la imagen cambia. Asi mismo, DHTML está trabajando cuando hace clic en un signo más para expandir un párrafo de texto. Es probable que JavaScript esté instruyendo el texto (o contenedores) para ser visible aunque el código original se envía desde el servidor como un conjunto de textos en modo oculto. La habilidad de JavaScript y ASP.NET AJAX para manipular y re escribir casi cualquier parte de una pagina web (incluido el texto) es que hace posible la mayoría de efectos dinámicos. 1.2.9 Extensible Markup Lenguage (XML) Aunque Microsoft había dado una m ano en las especificaciones para Extensible Markup Lenguage (XML), los estándares vienen desde la World Wide Web Consortium (W3C). Microsoft utiliza XML ampliamente en tecnologías Web como un camino de pasar datos a todos. Estos datos incluyen intercambios browser-to-server, server-to-browser, server-toserver y desde un programa a otro. 1.2.10 Silverlight Silverlight de Microsoft es cross-browser, plug-in cross-plataform multimedia. Trabaja en Windows, Mac e incluso plataforma rival de Linux. Estoy casi seguro que has visto películas de Macromedia (Ahora Adobe) Flash en una página Web. Silverlight es como Flash, solo que más rápido, tecnológicamente mas avanzado, y más fácil de programar, especialmente en lenguajes .NET. Este es llamado “El asesino de Flash”, utiliza un form de marcación de XML llamado XAML para generar gráficos y comportamientos. Puede utilizar Silverlight para incrustar de todo desde un screencam a videos de dibujos animados de full movimiento, utilizado para transmitir y difundir en vivo. El tamaño de descarga es razonable, y Silverlight corre aislado en su propia zona, conocido como sandbox, así mismo el programa debería ser lo suficientemente seguro para la mayoría de usuarios. Silverlight es muy atractivo como una plataforma multimedia. Este se compromete a ser un gran negocio como las herramientas y tecnologías mas avanzadas. 1.2.11 Lenguaje integrado de consultas (LINQ) Lenguage Integrated Query (LINQ) es un conjunto de agregados para lenguajes de programación C# y VB.NET que tratan fácilmente con datos. LINQ llega en varios dialectos, incluido LINQ para SQL, LINQ para XML y LINQ para objetos. Después de las declaraciones y sintaxis LINQ maestras, puede aplicar los conocimientos para todas las ordenes de datos. En efecto, LINQ permite combinar datos desde multiples orígenes tales como base de datos, Web service y archivos XML. Para la mayoría de personas, los grandes beneficios es el soporte de LINQ para SQL Server. En lugar de escribir complicadas declaraciones SQL, y cruzando los dedos para que no ocurra un error de sintaxis. LINQ le permite utilizar palabras claves familiares en las consultas. Visual Web Developer (como con otros miembros de la familia de Visual Studio 2008) mira lo que escribe y le alerta de los problemas. 1.2.12 ADO.Net ADO.NET de Microsoft es una tecnología para trabajar con datos y base de datos de todo tipo. Cuando una aplicación Web toma a una base de datos tales como Microsoft SQL Server, es probable que utilice ADO.NET. La introducción de LINQ ha ocultado mucho de ADO.NET desde las vistas en Visual Web Developer. 1.2.13 SQL Server SQL Server 2005 y 2008 son productos claves en estrategias de tecnologías Microsoft Web. La frase “Es todo acerca de los datos” se aplica a la mayoría de aplicaciones Web más graves. Si hace un seguimiento a las preferencias del usuario, generando reportes complejos, o almacenar pedidos del cliente, necesita un rápido y fiable motor de datos y base de datos relacionales. Microsoft proporciona SQL Server Express gratis (pero, como ellos dicen “pueden aplicar coneccion de cargos”), siendo una genial elección para principiantes. Las aptitudes y adquisiciones de datos utilizando SQL Express son directamente transferibles para las versiones más recientes de SQL Server desde un estándar empresarial. 1.2.14 Internet Information Services Internet Information Services (IIS) de Microsoft es el principal producto de servidores Web que viene gratis con la versión más reciente de Windows. Como una plataforma, IIS entrega paginas Web y servicioes Web a lo solicitado por un navegador u otra aplicación. ASP.NET 3.5 trabaja en conjunto sin problemas con IIS para producir paginas dinámicas. Puede ejecutar IIS en su estación de trabajo de desarrollo, a lo largo de la intranet de su compañía, o exponerlo al gran publico de internet. Sin embargo, a menos que ejecute un gran negocio en la Internet, probablemente utilice IIS a través de una compañía de hosting independiente. Estos hosters son especialistas que rentan espacios en sus servidores, vender ancho de banda, mantener las conexiones de internes y programas backups. Durante el desaroolo de escenarios en Visual Web Developer, puede no usar IIS todavía. VWD incluye un ligero servidor Web que hace casi todo lo que usted necesita en su maquina local de desarrollo. Cuando este satisfecho con las paginas y código, transfiera el sitio a un equipo IIS desde dentro de Visual Web Developer. Introducción a ASP.NET 3.5 2.1 Formularios HTML por ningún lado En muchos aspectos las etiquetas HTML disponibles para crear entrada de datos son un ejercicio confuso y frustrante de inutilidad. Los usuarios pueden insertar información para toda respuesta de un cuestionario de un pedido de productos. Utilizando un práctico botón de envío, también disponible en formato HTML, usted puede enviar la información a absolutamente nada. 2.2 Entrada de datos HTML sin Salida. 1° Abrir su editor de textos favorito, en mi caso un Bloc de notas es suficiente. Para ello puede hacer clic en el botón Iniciar, Todos los programas, Accesorios y clic en Bloc de notas. Figura 2. 1 2° Escribe el siguiente código: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.handsofthelp.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.handsofthelp.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>HTML sin salida</title> </head> <body> <form> Por favor, ingrese un nombre:<br/> <input type="text" name="username"/> <p/> Pulse el botón para recibir esperanzas y sueños:<br/> <input type="submit" value="Botón de sueños" /> </form> </body> </html> 3° Guárdelo con el nombre Sin salida.html. 4° Ingrese a su pagina Web creada. Figura 2. 2 5° En el cuadro Por favor, ingrese un nombre, escribe tu nombre. 6° Clic en Botón de sueños. 2.3 Su navegador es un cliente ligero El trabajo principal del navegador es dar un solicitud al servidor y mostrar lo que el servidor manda como respuesta. Utilizando HTTP como un protocolo de transferencia, su navegador analiza (interpreta) el código HTML que recibe desde el servidor, pero de otro modo hace un menor procesamiento. Debido a que su cliente HTTP (navegador) deja la mayor parte del trabajo de procesamiento al servidor, se le considera un cliente ligero. No existe nada de malo con un cliente ligero, e incluso puede tener procesos JavaScript. Con Plug-ins, lo que virtualmente todos los navegadores se han construido, un cliente ligero puede también procesar ciertos tipos de archivos, tales como SWF (Compilado de archivos de Adobe Flash), Java applets, controles ActiveX, así como otros archivos que requieren que su navegador sea compatible con pulg-ins. En su mayor parte, sin embargo, un cliente ligero es un modelo en el que el servidor, no su procesamiento y el trabajo de su navegador es el mostrar el contenido que se obtiene del servidor. Figura 2. 3 2.4 Un protocolo sin un país: estados HTTP Además de ser un cliente ligero, su explorado HTTP cliente es “sin estado”. Tan pronto como una pagina web llega a su ordenador, la conexión entre el navegador y el servidor, se rompe. El navegador no recuerda la ultima pagina, esto es no tener “estado”. Tan pronto como llegue a la siguiente página, no recuerda la última pagina. Seguramente está pensando que la memoria Caché tiene una gran variedad de paginas anteriores y que su navegador recuerda el historial de características de cada una de las paginas anteriores. Esto no significa que se “retenga el estado”. Usted no puede utilizar los datos y la información en la memoria caché del navegador o el historial como estados para utilizarlos como pagina actual en memoria. Lo que está en memoria activa es la pagina web que el servidor ha enviado, el estado de la pagina anterior no está allí. Tan pronto como cargue una pagina, la pagina anterior es expulsada y la nueva aparece allí. Tanto la información que usted coloca en un cuadro de entrada de texto, es enviado al silicio del olvido al hacer clic en el botón Enviar, el conocimiento de la pagina anterior (su estado) se ha ido cuando llega la nueva pagina. Un buen sitio Web organizado puede aparecer para mantener el estado de los vínculos en páginas conectadas para un conjunto de paginas relacionadas, pero esto es una ilusión que el diseñador Web ha elaborado para una buena planificación. 2.5 Pregunte a los expertos Parece que el término Estado se utiliza en diferentes formas en la programación. He oído de todo “Maquinas de estado” a “Patrones de diseño de estado”. ¿Qué es una sencilla explicación de “estado”? Un estado de objeto se refiere a una condición del objeto. Por ejemplo, un Booleano puede tener dos estados True o False. Cuando ingresas información dentro de un formulario, la información que ingresas refleja el estado actual del formulario. Para guardar este estado, usted tiene que colocarlo en algún lado para que mantenga su estado hasta que lo necesite otra vez. Uno de los lugares donde usted puede poner los datos del estado se encuentra en una variable, y lo puede tener para usted temporalmente. Para el almacenamiento permanente de un estado, puedes utilizar una base de datos o cualquier otro archivo que pueda almacenarse en un disco duro. Los Cookies mantiene el estado en un sentido. Estos son pequeños archivos de texto almacenados en el equipo cliente, y pueden ser leídos y utilizados. Sin embargo, estas Cookies solo guarda el ID de sesión, pero generalmente los datos de la sesión actual se almacenan en el servidor. Así mientras que las Cookies pueden ser utilizadas en formas muy creativas para emular un estado, ellos contienen pequeña información y están a merced de los usuarios quienes pueden quitarlos cuando lo deseen. La siguiente imagen muestra un modelo general que utilizan los desarrolladores al crear una aplicación Web estándar. Figura 2. 4 Los que poseen más experiencia con HTML pueden ser consientes de estas limitaciones en un entorno de trabajo en el que usted puede hacer poco más que presentar elementos estáticos en un entorno sin estado. El entorno de ASP.NET le permite moverse de un entorno HTTP sin estado a un estado de conservación único. 2.6 ASP.NET como una alternativa al CGI Microsoft como alternativa al Common Gateway Interface (CGI) es ASP.NET, ahora en versión 3.5. Como una plataforma Web unificada, ASP.NET proporciona lo que se necesita para desarrollar aplicaciones que albergan estado y el uso de la información que colocas dentro de un formulario HTML. En lugar de enviar la información del formulario al vacio cuando hace clic en el botón Enviar, los datos pueden ser almacenados temporalmente o permanentemente. Usualmente cuando pensamos en guardar un estado, podemos imaginar la escritura de los datos en un dispositivo de almacenamiento como un disco duro. Utilizando un procesador de textos, cada vez que guarde el archivo, guarda el estado. Utilizando ASP.NET puede hacer lo mismo con la información de cualquier persona que utiliza su aplicación Web. Esto le permite construir aplicaciones donde la información introducida puede almacenarse para su uso, ya sea con la próxima petición HTTP o con un conjunto de datos introducidos por los usuarios en todo el mundo, esto es una gran hazaña comparada con guardar el estado en su archivo de procesador de texto. ASP.NET es el estado que facilita la gestión que proporciona las herramientas que usted necesita para controlar el estado. Usted no necesariamente quiere guardar todo el estado de la pagina Web, pero sin duda desea guardar el estado de los datos ingresados por los usuarios y quizás el URL de la pagina. Utilizar la gestión de estado le permite hacer esto. El servidor Web de Microsoft, Internet Information Services (IIS) utiliza la API del servidor de Internet (ISAPI) para hacer llamadas a funciones en lugar de utilizar los Scripts CGI. Mediante el uso de ISAPI, los desarrolladores pueden crear aplicaciones basadas en Web que se ejecutan más rápidamente y tienen una mayor extensibilidad de CGI, entre otras ventajas. En el nivel más bajo, interfaces de ASP.NET con IIS a través de una extensión ISAPI. Sin embargo, este libro se centra en el alto nivel de interacción con ISAPI en formularios ASP.NET y el código escrito en C# (pronunciado “C Sharp”) que utiliza ASP.NET. ASI que en lugar de tener que hacer frente a comunicaciones minuciosas de bajo nivel, ASP.NET le permite escribir sus scripts en C#. Otra manera de ver a ASP.NET es como una solicitud que tenga un motor de procesamiento de peticiones y las envía a un punto en el que puede adjuntar C# Script para procesar la solicitud. Así mientras que no vamos a pasar tiempo en la vivienda de las operaciones de bajo nivel, usted puede estar seguro de que esas operaciones son manejadas de manera eficiente. El uso de “código administrado” nombre de código de Microsoft que se ejecuta bajo la dirección de .NET Framework, una aplicación es ejecutado en una maquina virtual en lugar de su propio procesador. Ambos, C# y Visual Basic .NET (VB.NET) son lenguajes para la creación de código administrado que se ejecutan eficientemente en entornos .NET. 2.7 Desde el lado del cliente a el lado del servidor Como has visto en la imagen anterior, todo lo que el explorador Web hace es realizar peticiones al servidor y recibir páginas Web en forma de código HTML. El navegador toma el HTML y construye una página para verla en su navegador Web. En su mayor parte, esto se continuará produciendo cuando adopten ASP.NET. Figura 2. 5 La principal diferencia es que escribiendo y ejecutando código del lado del servidor, usted puede generar HTML que efectivamente maneja estados dinámicos de modo que usted puede utilizar y reutilizar un determinado estado. La siguiente imagen muestra un flujo general cuando un archivo ASPX en un servidor Microsoft recibe una llamada del cliente. En busca de un ejemplo, no necesita mirar más allá del ejemplo original de la pagina HTML con el formulario. Con un programa de lado del servidor para la captura de los datos que se envían al servidor, muchos de los procesos en el servidor son posibles. Supongamos que el usuario ingresa el nombre Leiner Cardenas. El archivo del lado del servidor puede usar la propiedad name, username para extraer un valor. En este caso seria extraer el nombre de Leiner Cardenas y hacer algo con ella. Puede ejecutar un script SQL para almacenar el nombre en una base de datos, compararlos con una contraseña, o puede transmitir información sobre Leiner Cardenas hacia el navegador en HTML. Para tener una idea de las diferencias y semejanzas entre HTML y ASP.NET, podemos tomar el formulario HTML y añadir una respuesta calculada del servidor. En el siguiente ejemplo verás dos Scripts. Una de ellas es un script en ASP.NET y el otro es en código C# utilizando un código subyacente “code behind” que sirve como un motor de evento para la solicitud. El formulario incluye una etiqueta de nombre y código. runat="server" Esta pequeña línea de código significa que todo va a ser atendido por el servidor. Así, a diferencia del archivo HTML que hace todo el trabajo en el cliente (navegador), el tratamiento se realiza en el servidor y devuelto al cliente como HTML. Sin embargo, el servidor puede hacer mucho más, incluido el envió y recuperación de datos de una base de datos. Mientras que obtener código HTML del servidor no es nada nuevo, los nuevo es que el código HTML regrese a su origen en el navegador y es generado por los archivos de ejecución en el servidor que usted escribió líneas arriba. El ejemplo que veremos se guarda en un archivo ASP.NET llamado Dreamer.aspx. En el archivo Dreamer.aspx, el contenedor <form> incluye una ventana de ingreso de texto al igual que el archivo HTML sin salida, con solo unas ligeras diferencias. <asp:TextBox… En lugar de… <input type ="text"… Asimismo el contenedor <form> tiene un boton utilizando el script. <asp:Button… En lugar de… <input type ="submit"… Se encontró en HTML. Por el momento no se preocupe por las cabeceras y los estados del Using System. Aquí, mira los elementos del formulario ASP.NET, el cuadro de texto, botones, etiquetas y teniendo en cuenta que son análogas a las del texto y el botón Enviar de las etiquetas HTML. Sin embargo no hay etiqueta. Una vez que empiece a ver que mucho de lo que sucede en ASP.NET utiliza elementos de formulario, usted será capaz de ver que usted ya sabe acerca de una buena parte de sus experiencias ASP.NET con HTML. 2.8Dreamer.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Dreamer.aspx.cs" Inherits="_Dreamer" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Server Side Dreamer</title> </head> <body> <form id="form1" runat="server"> <div> Please enter your name:<br /> <asp:TextBox ID="DreamBox" runat="server"> </asp:TextBox> <p /> Press the button to receive all of your hopes and dreams:<br /> <asp:Button ID="Dreamer" runat="server" Text="Dream Button" OnClick="DoDream" /> <p /> <asp:Label ID="Dreams" runat="server" Text="Dreams Here"></asp:Label> </div> </form> </body> </html> Junto con el código ASP.NET, el código C# se genera en un archivo conocido como CS “código subyacente”. Como verá el código C# se utiliza principalmente para desencadenar los eventos que inician una secuencia de comandos en un script ASP.NET. EL siguiente código C# en gran medida ha sido generada por Visual Studio 2008, y la única línea qjue el desarrollador tiene que añadir es una declaración de entrada desde asp:TextBox y ponerlo en asp:Label. El código también elimina por defecto el evento inicial Page_Load de cualquier acción que se inicie tan pronto como se carga la página. Este script espera a que el usuario de clic en el botón para iniciar la acción de agregar contenido para el formulario asp:Label. Dreamer.aspx.cs using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml.Linq; public partial class _Dreamer : System.Web.UI.Page { protected void DoDream(object sender, EventArgs e) { Dreams.Text = DreamBox.Text + "'s dreams are big ones!"; } } Figura 2. 6 SI ese código es desalentador, es solo porque se utiliza el estado using system. Sin embargo, si tiene en cuenta que todo ha sido generado automáticamente por Visual Studio 2008, usted está realmente mirando unas pocas líneas de código. La figura líneas arriba muestra lo que puede esperar para ver el nombre una vez ingresado el dato y pulsar clic en el botón Dream. Hasta este punto, no espero comprender como trabaja ASP.NET o C#. A medida que se profundiza, comprenderá más, pero el objetivo primordial es mostrar la forma de hacer las tareas utilizando ASP.NET. Al igual que cuando conduce su auto, puede saber un poco acerca de cómo es la combustión interna del motor o el sistema hidráulico. Sin embargo, usted solo desea llegar a su destino. En el caso de ASP.NET, lo que significa la creación de aplicaciones útiles. 2.9 Organización .NET Probablemente la mejor manera de pensar en .NET es como una gran sistema de control con dos elementos claves. La primera es la Biblioteca de clase de .NET Framework. Esta biblioteca cuenta con miles de clases organizadas dentro de los “namespaces”. Este gran conjunto de clases fue diseñado para proporcionar toda la clase de apoyo prácticamente para cualquier aplicación que un desarrollado desee crear. Esta biblioteca es un repositorio de tipos reutilizables para el desarrollo orientado a objetos. Por ejemplo, System.Web.UI Namespace le permite crear varios controles de servidor ASP.NET y las interfaces de usuario. Un namespace puede entenderse como un concepto para la organización de las clases. Cada namespaces contiene colecciones de clases, gran parte de las cuales no son necesarias para cualquier aplicación. Lo siguiente representa un poco de las clases en namespace. Control Data Binder PageParser UserControl Para utilizar las clases, así como otras estructuras, como interfaces, deberá incluir el namespace en su programa. En segundo lugar, el centro de .NET, es common laguage runtime (Lenguaje común en tiempo de ejecución). El tiempo de ejecución es un agente de administración para el código, como se ejecuta. Todos los servicios, tales como la memoria, la gestión de subprocesos y remotos, son manejados por .NET Framework. Por ejemplo, VB.NET (Visual Basic) tiene acceso a la misma familia de las clases al igual que C#. Esto es diseñado para ayudar al tipo estricto de seguridad y otras estructuras que garanticen tanto la solidez y la seguridad. Microsoft se refiere al código que se centra en el lenguaje común en tiempo de ejecución como código administrado y se refiere al código que no se dirige al tiempo de ejecución como código no administrado “unmanaged code”. La siguiente imagen ilustra el código administrado que se ejecuta en diferentes entornos. Figura 2. 7 ASP.NET es uno de los principales marcos proporcionados por .NET Framework. De la misma manera que ASP.NET se integre en un programa VB.NET, puede desarrollarse con J#, JScript o C#. Todos son procesados mediante el uso de .NET Framework. Así que una vez que aprenda a desarrollar aplicaciones en un solo lenguaje, como C#, buscará desarrollar en otros lenguajes muy simples o similares. 2.10 Contextos de desarrollo Si usted nunca ha desarrollado las aplicaciones del lado del servidor, el proceso puede parecer desalentador, pero en realidad no lo es. Puedes desarrollar en un simple entorno HTML, agregando ambas secuencias de comandos C# y formularios ASP.NET. En el ejemplo Dreamer.aspx, podríamos haber desarrollado secuencias de comando en C# en el mismo contexto como un código HTML y formularios ASP.NET. Por ejemplo, el siguiente código en la pagina HTML haría lo mismo que el archivo Dreamer.aspx.cs. <%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server" language="C#"> protected void DoDream(object sender, EventArgs e) { Dreams.Text = DreamBox.Text + "'s dreams are big!"; } </script> …rest of ASP.NET page Para que sea más fácil de aprender. Sin embargo, este libro utiliza el código generado cuando se utiliza Visual Studio 2008, como una herramienta de desarrollo. Si prefiere utilizar otra herramienta, no dude en hacerlo. En el siguiente capítulo, verá cómo utilizar Visual Studio 2008 y proporcionar el código de uso de otras herramientas, incluidas herramientas tan simples como el Bloc de notas de Microsoft. 2.11 Ejecutando archivos ASP.NET en su ordenador o LAN Cuando guarda un archivo como un archivo ASPX, puedes guardar el derecho de C# en el archivo con los formularios ASP.NET utilizando la etiqueta <script> o puede utilizar el método de “código subyacente”, descrito anteriormente. Esto no significa que puede colocar sólo archivos ASPX y el código subyacente de archivos de C# en un servidor web y todo funcionará. Usted necesita colocar sus archivos en el servicio de alojamiento corriendo en IIS7, el cual puede ser su propio ordenador. Puede hacer esto en su propio ordenador donde tiene Visual Studio 2008 configurado, po lo que no está frente a una disyuntiva o alternativa. 2.12 Pregunte a los expertos ¿Por qué ASP.NET y C# se desarrollan en ventanas separadas si son parte del mismo programa? ¿No son la mayoría de los programas desarrollados en un solo archivo? ASP.NET es un conjunto de formularios y controles, mientras que C# es un lenguaje dinámico que no solo se comunica con ASP.NET sino que también con Base de datos y enlaces externos. Piense en la separación como si fuese un auto. El auto sin el motor se centra en la disposición de los asientos y los diferentes controles hacen que su auto esté listo para ser utilizado para el transporte. Este es el aspecto del código subyacente ASP.NET. El motor del auto es lo que hace andar. Este es un elemento diferente que el cuerpo del auto y tiene un tipo diferente de pensamiento a trabajar en el. Sin embargo, el motor interactúa con la carrocería del auto y responde a sus controles. C# es como el motor, y tenerlos separados durante el desarrollo, pueden centrarse en hacer lo que usted realmente quiere. 2.13 Instalación y uso de un servidor IIS7 en su sistema SI quieres trabajar con un entorno mas realista con los archivos que creaste con Visual Studio 2008 o alguna otra herramienta, puede configurar un sistema ASP.NET de trabajo en su propio ordenador y utilizarlo en su LAN. Dependiendo de la versión de Windows Vista que usted tiene, usted puede tener o no IIS7 a su disposición, y si no lo hace, usted puede actualizar su versión de Windows Vista. Los siguientes pasos le mostraran los procedimientos. 1° Clic en el botón Iniciar. 2° Clic en Panel de control. Figura 2. 8 3° En el panel de control, pulse clic en Vista clásica. Figura 2. 9 4° Doble clic en Programas y características. Figura 2. 10 5° En el panel de exploración, pulse clic en Activar o desactivar las características de Windows. Figura 2. 11 6° SI aparece el control de cuentas de usuario, pulse clic en Continuar. Espere unos instantes mientras se cargan los elementos de la ventana características de Windows. Figura 2. 12 7° Pulse clic en el botón Más de Internet Information Services. 8° Ahora haga lo mismo para Servicios World Wide Web. 9° Expanda Características de desarrollo de aplicaciones. 10° Active la casilla Extensibilidad de .NET. 11° Active la casilla Extensiones ISAPI. 12° También active la casilla Filtros ISAPI. 13° Pulse clic en el botón Aceptar. Figura 2. 13 14° Espere mientras el sistema configura los cambios. Figura 2. 14 15° Para asegurarse de que está instalado correctamente, abra su navegador (Internet Explorer, Firefox o cualquier otro navegador con el que trabaja bien). 16° Escribe la URL http://localhost/ en la ventana de su navegador. La siguiente imagen muestra lo que verá si la instalación de IIS7 se trabajó con éxito. Figura 2. 15 17° Después de la activación, usted encontrará algunas nuevas carpetas importantes. Pulse clic en el icono Iniciar en la esquina inferior izquierda de la pantalla. 18° Pulse clic en Equipo. 19° Doble clic en Disco Local (C:). 20° Pulse doble clic en la carpeta inetpub. 21° Pulse doble clic sobre la carpeta wwwroot. La carpeta wwwroot es donde se colocan sus aplicaciones ASP.NET como muestra la siguiente figura. Figura 2. 16 22° La carpeta Dreamer contiene los archivos de aplicación ASPX y CS. Puedes colocar los archivos de aplicación directamente en la carpeta wwwroot, pero con los demás archivos y carpetas utilizados para la aplicación, las cosas parecerán desordenadas o confusas si las hace. Es un mejor lugar para cada aplicación tener una carpeta separada en wwwroot. Utilizando Visual Studio 2008, cada aplicación Web genera una carpeta de aplicaciones, un archivo ASPX, un archivo C# (CS), un archivo web.config y una carpeta App_Data. Coloque el archivo XML web.config en el directorio raíz, si usted no tuviese una allí. Si la deja en la carpeta de aplicaciones, no se podrá ejecutar la aplicación a través de Internet, incluidos en una LAN. La siguiente imagen muestra una típica carpeta de aplicaciones. El archivo web.config se eliminó y se coloca en la carpeta wwwroot. Figura 2. 17 Cuando ejecutas una aplicación ASP.NET desde su ordenador, convertido dentro de un servidor ASP.NET, será capaza de ver una buena cantidad de formas con la que trabaja ASP.NET. Utilizando una simple aplicación Web que muestra a los usuarios la dirección IP, las aplicaciones son ejecutadas desde diferentes entornos en una LAN compuesta por tres equipos con Microsoft Windows Vista, Microsoft Windows XP y una Macintosh OS X. EL equipo con Vista contiene Visual Studio 2008 y actúa como un servidor Web con ASP.NET disponible. EN primer lugar, la siguiente imagen muestra lo que puede esperar a ver cuando se prueba la aplicación en Visual Studio 2008. Figura 2. 18 SI usted ejecuta el mismo programa haciendo referencia de la dirección IP (a excepción de 127.0.0.1), si esto es una LAN o dirección IP de Internet, usted verá una dirección IP diferente cuando ejecuta el mismo programa en el mismo equipo, como lo muestra la siguiente figura. Figura 2. 19 Como puede ver en la figura anterior, la dirección del servidor (192.168.0.3) y la dirección generada por la aplicación ASP.NET son idénticas. Esto es porque el cliente y el servidor comparten la misma dirección IP. La verdadera prueba llega cuando pruebe su aplicación en un equipo diferente. A continuación, el equipo diferente es el cliente, y donde tiene configurado ASP.NET es su servidor. La siguiente figura muestra el programa en un equipo con Windows XP, mientras que el servidor IIS7 es configurado en un sistema operativo Vista basado en un equipo diferente. Figura 2. 20 En la imagen anterior puede ver claramente que la dirección IP del cliente es diferente de la dirección IP del servidor. Ejecutando la aplicación ASP.NET en un cliente remoto, puede ver mejor que está recibiendo no solo la dirección IP local del servidor. La prueba acida para asegurar de que lo que está viendo no es solamente una pagina web ordinaria que de al alguna manera obtiene la dirección IP desde su servidor para ejecutar aplicaciones ASP.NET en un cliente que sabe que positivamente no puede alojar ASP.NET. (Probablemente sabe que esto no se puede lograr con HTML o solo XHTML) Afortunadamente, uno de los clientes en la LAN es una Macintosh y si llamamos al archivo .aspx en una Mac, sabemos que la única forma de ver la dirección IP en MAC es si estamos tratando con una verdadera aplicación del lado del servidor. La siguiente imagen muestra lo que verá en su navegador Safari en una MAC. Figura 2. 21 La figura anterior muestra más allá de cualquier duda que el que está haciendo todo el trabajo es el lado del servidor ASp.NET combinado con un programa C# generado en el servidor remoto. ¿Significa esto que puedes desarrollar aplicaciones en una Mac justo como lo harías en una PC con Windows? Mmmm…. No exactamente. Usted puede escribir sus aplicaciones C# y ASP.NET en una MAC utilizando un simple editor de textos o algo más sofisticado como Dreamweaver o quizá un Expression Web. A continuación transfiriendo el código alojado en ASP.NET, puede ver lo mismo como lo hace en la figura anterior. Sin embargo no puedes alojar el código en una Macintosh porque ASP.NET no puede ser configurado en una MAC. Sin embargo, como verá en la siguiente sección, puedes trabajar con cualquier tipo de sistema que quiera si usted tiene un servicio de alojamiento ASP.NET. 2.14 ASP.NET en el Mundo Real Una de las mejores opciones disponibles es para desarrollar sus aplicaciones ya sea utilizando Visual Studio 2008 o su herramienta de desarrollo Web favorito, y para colocar aplicaciones en un servidor de producción. Un servidor de producción es un lugar donde colocan sus aplicaciones para el uso real en la Internet. Varias empresas proporcionan alojamiento ASP.NET junto con el software de servidor necesario para ejecutar archivos ASP.NET. El descuento de ASP.NET tiene una oferta que proporciona el 50% de descuento para contratos de un año. Dentro de los primeros 30 días, si usted decide no querer el servicio, puede obtener un reembolso completo. Si usted está como con el desarrollo de algunas aplicaciones ya sea utilizando Visual Studio 2008 o su propio sistema con IIS7, tal vez podría querer dar Descuentos ASP.NET para intentar ver como es el desarrollo en un servicio de alojamiento. La ventaja de utilizar un servicio de alojamiento de producción es que sus aplicaciones pueden estar a prueba en el mismo entorno en la cual finalmente estará colocando los archivos completos. Utilizando una LAN es un equivalente cerrado, y si usted tiene múltiples ordenadores, esto es la mejor alternativa para un servicio de alojamiento. Sin embargo, con grandes Base de datos y otros elementos consumiendo espacio, no puedes derrotar un servicio de alojamiento. Mientras que Visual Studio 2008 es el entorno de desarrollo recomendado, el entorno final de prueba es un servidor de producción. 2.15 Lenguajes asociados con ASP.NET Los ejemplos para este libro están escritos en C# porque Microsoft lo recomienda. También, C# es un lenguaje estándar ECMA 334. Esto significa que la sintaxis es similar a la de otros lenguajes ECMAScript tales como ActionScript 3.0 y si usted comprende una de los otros lenguajes ECMASCript, aprender otras es muy fácil. Por lo tanto a pesar de que ActionScript 3.0 es desarrollado a lo largo de las líneas de los estándares ECMA 262, tiene mucho más en común con C# que con las versiones anteriores de ActionScript. Asimismo, JavaScript 2.0 se desarrollará como un lenguaje ECMAScript, y tomando JavaScript 2.0 cuando este disponible debe resultar ser un menor desafío si ya conoce C#. Los lectores quienes están familiarizados con C, C++ o Java, encontrarán a C# muy similar también. Por lo tanto, utilizando C# no solo le ayudará a comprender en un lenguaje de Internet estándar (ECMAScript), pero esto también ayudará a aprender algo acerca de otros lenguajes en los que se basa ECMAScript. SI usted ve un programa escrito en Java, por ejemplo, encontrará muchas estructuras que se reconocen desde C#. 2.15.1 VB.NET, No exactamente más VB Si usted está conforme con Visual Basic, le será conveniente desarrollar en ese lenguaje. Utilizando Visual Studio 2008, puede seleccionar la opción para utilizar VB.NET. Sin embargo, el Visual Basic de antaño no es mucho como VB.NET y puede que no salve mucho tiempo ni muchas células cerebrales como usted podría pensar n un lenguaje que conoce. sticking Ademas, C# es utilizado ligeramente con ASP.NET, asi que podría ser buen momento para aprender C# con ASP.NET mientras pueda obtenerlas en pequeñas dosis. 2.15.2 J# y JScript.Net, todavía se siente como un lenguaje de secuencia de comandos SI usted está familiarizado con JavaScript pero no sabe acerca de cualquier Visual Basic o C#, usted podría querer intentar utilizar cualquier J# o JScript.Net. Ambos tienen la sensación de JavaScript pero son diferentes uno del otro. Sin embargo, a menos que tenga una buena razón, tales como trabajar en un entorno donde J# o JScript.NET son utilizados, se recomienda C#. EN primer lugar, encontrará muchas similitudes entre estos lenguajes y C#, asi que no es un gran salto. Capítulo 3:ASP.NET 3.5, Herramientas y entornos de desarrollo En algún nivel de codificación, casi todo se puede hacer con un simple editor de textos. Utilizando un editor de textos para escribir códigos le da una enorme cantidad de flexibilidad y una profunda comprensión de que está haciendo su programa. El trabajo con ASP.NET 3.5, es lo mismo, pero creando aplicaciones ASP.NET con Notepad o TextEdit pondrá la curva de aprendizaje bastante elevada. Como se vio en el capitulo anterior, un programa ASP.NET es en realidad una combinación de código ASP.NET y C#. Por lo tanto, hacer el seguimiento de las cosas con un editor de textos es un poco difícil. En este capitulo usted aprenderá todo acerca de una maravillosa herramienta potente que no solo le ayudará en su aprendizaje de todas sus aplicaciones construidas, sino también le ayudará en su aprendizaje acerca del código de los archivos con los que estará creando. 3.1 Visual Studio 2008 La magnitud de ASP.NET 3.5 es tal, que usted necesita una poderosa herramienta que le proporcione acceso sobre 7000 clases que ahora conforman ASP.NET. Como usted conoce desde el capitulo anterior, las clases están organizadas entre espacios de nombres (namspaces), pero con demasiadas clases que encontrar en cada uno, el derecho de espacios de nombres es una ardua tarea. Para hacernos la vida simple, Microsoft tiene diseñado una herramienta tan potente como el lenguaje propio en Visual Studio 2008. SI usted está familiarizado con anteriores versiones de Visual Studio, usted probablemente encontrará esta última versión familiar. Sin embargo, asegúrese que esté utilizando Visual Studio 2008 para crear todas las diferentes aplicaciones que encontrará en este libro. Visual Studio 2008 incluye muchas nuevas propiedades y clases que no están disponibles en Visual Studio 2005 o versiones anteriores. Todos los ejemplos en este libro han sido desarrollados utilizando Visual Studio 2008, y mientras que pueden ser duplicados utilizando un simple editor de textos u otras herramientas de desarrollo Web tales como Dreamweaver o Expression Web, encontrarás el proceso de desarrollo mucho más tedioso y propenso a errores. Asimismo, puede ser capaz de desarrollar una buena parte de las aplicaciones sencillas utilizando Visual Studio 2005, pero yo no quiero recomendar esto, porque antes o después encontrará nuevas características que no están disponibles en Visual Studio 2005. La mejor alternativa al uso de la versión completa de Visual Studio 2008 es utilizando la edición Express. Mientras que Express Visual Studio 2008 no tienes todas las funcionalidades de la versión completa, usted será capaz de seguir este libro y crear los ejemplos. 3.2 Instalando Visual Studio 2008 Antes de instalar Visual Studio 2008, le recomiendo instalar el servidor Web IIS7 como se describe en el capitulo anterior. Puedes simular ejecutando aplicaciones ASP.NET 3.5 con Visual Studio 2008, pero con la configuración IIS7, puedes en realidad ejecutar aplicaciones ASP.NET en un entorno Web server-side utilizando la compilación y un entorno más realista. Sin embargo, esto es estrictamente opcional. Instalar Visual Studio 2008 es sencillo y simple. Antes de iniciar el proceso de instalación, verifique el espacio disponible en su disco duro para asegurarse que tenga suficiente espacio. Desfragmente su disco duro antes de instalar Visual Studio 2008. EL programa ocupará varios gigabytes del disco duro, y no querrá tener el 90% del proceso de instalación solo para encontrar que usted tiene espacio insuficiente en su equipo. Pulse clic en el icono de instalación, si usted tiene descargado Visual Studio 2008 desde Microsoft o ha recibido un CD-ROM. Se paciente, la instalación toma unos largos minutos. 3.3 EL entorno de Visual Studio 2008 Una vez que tenga instalado Visual Studio y comience a utilizarlo, encontrará muchas opciones diferentes. La única principal opción que quiera estar al tanto es el desarrollo en C#. Encontrarás otros lenguajes disponibles para utilizar con ASP.NET como se vio en el capitulo anterior. Todas las aplicaciones de ejemplo se realizará con código conectado a un script C#. Esto no es dificultad mantener sus aplicaciones C# en un entorno ASP.NET, pero si las cosas no están mostrando los mismo en sus aplicaciones como están en el libro, puede ser debido a que tenga accidentalmente el conjunto Visual Studio 2008 para VB.NET o para algún programa con otro lenguaje que trabaja con ASP.NET. SI bien la escritura del código es bastante sencilla, usted encontrará que Visual Studio 2008 le da mucha ayuda en obtener lo correcto. A medida que empieza a ingresar código, los diferentes menús de contexto Pop up le ayudaran a completar la línea de código o segmento. Microsoft llama a esta característica IntelliSense y para aprender todo de las diferentes características de ambos ASP.NET y C#, encontrarás estos menús de un valor incalculable. Como se ha señalado, ASP.NET tiene más de 7000 clases y estas clases tienen propiedades, algunos tienen eventos y métodos. Los menús IntelliSense desplegarán varias capas diferentes y proporcionan ayuda a como se desarrollan sus aplicaciones, y si no utiliza menús contextuales que aparecen espontáneamente, puedes encontrar un poco molesto, con ejemplos sencillos. Sin embargo, como usted valla avanzando, verá que lo necesita urgentemente. Como con la mayoría de tareas que requieren aprender algo nuevo, la mejor forma es saltar y de hecho hacer algo una vez que haya completado los fundamentos. En la siguiente sección, usted subirá y escribirá y probará una aplicación simple ASP.NET utilizando C# como el mecanismo de tiro. A medida que valla a través de los pasos, las características se describen para usted, y verá que utilizar Visual Studio 2008 es sencillo y útil. 3.4 Creando una simple aplicación ASP.NET El saque inicial de la aplicación utilizando Visual Studio 2008 es similar al “Hello World” ejemplo que se encuentra en casi cualquier idioma. La aplicación utilizará un formulario ASP.NET (Etiqueta) y el código C# colocará el valor del texto de la etiqueta Formulario en la pantalla cuando abra la pagina. Por lo tanto, sin mas demoras, seleccione Iniciar, Microsoft Visual Studio 2008 e iniciará. Cuando abre Visual Studio 2008 por primera vez, usted verá las ultimas noticias de MSDN y Proyectos recientes. Después, como ha configurado su Visual Studio 2008 a la manera que le agrade, se iniciará con las configuraciones que utilizó por última vez. La siguiente figura muestra una típica configuración para Visual Studio 2008. En la parte inferior, puedes ver la ventana Lista de errores y a lo largo de la parte superior del borde derecho de la ventana de Visual Studio 2008, puede ver el Acoplado que cierra el Explorador de Soluciones. Todos los ajustes para la visualización de las diferentes herramientas y ventanas se encuentran en el menú Ver. Figura 3. 1 La mejor manera de empezar con ASSP.NET es crear una pequeña aplicación que haga algo. Los siguientes pasos caminan a través de la creación de una aplicación y al mismo tiempo señalar una serie de herramientas que puedes utilizar. Antes de iniciar, sin embargo, necesitas comprender que crear una aplicación ASP.NET es un poco diferente de crear una aplicación en C#. En el menú Archivo, submenú Nuevo, verá 4 opciones: Proyecto Sitio Web Archivo Proyecto del código existente Figura 3. 2 Para la mayor parte de este libro, usted podrá seleccionar Sitio Web y Guardar un archivo ASPX que trabaja con los archivos CS que podrá crear simultáneamente. La siguiente imagen muestra todos los menús y submenús seleccionado y abierto. Dado la información, vamos a iniciar: Figura 3. 3 1° Abrir Visual Studio 2008. 2° Clic en el menú Archivo. 3° Seleccione Nuevo. 4° Clic en Sitio Web. Quizá vea la pantalla un poco diferente dependiendo de cualquier configuración que tenga hecho en Visual Studio 2008. Figura 3. 4 Después de elegir Sitio Web, se muestra el cuadro de dialogo Nuevo Sitio Web. (Vea la siguiente imagen). Las plantillas instaladas de Visual Studio deberían mostrar la opción seleccionada Sitio Web ASP.NET. Figura 3. 5 5° En el menú desplegable Lenguaje pulse clic en la flecha del lado derecho. 6° Pulse clic en la opción Visual C#. Figura 3. 6 Nota: En la esquina superior derecha del cuadro de dialogo Nuevo Sitio Web, encontrará un menú desplegable con la opción .NET FRAMEWORK 3.5, si no estuviese seleccionada, procure seleccionarlo antes de continuar. Figura 3. 7 Bien, escriba la ruta donde desea almacenar su aplicación, o pulse clic en el botón Examinar y seleccione la ubicación de su archivo. Utilizando Visual Studio 2008 puedes poner tus archivos en cualquier lugar, pero definitivamente querrá organizarlos en algún lugar de manera que pueda ser fácilmente recuperado. Figura 3. 8 7° Pulse clic en el botón Examinar. 8° En el cuadro de dialogo Seleccionar una ubicación, pulse clic en su carpeta de usuario. En este ejemplo Handz. 9° Pulse clic en el botón Crear nueva carpeta y se crea WebSite. 10° Seleccione WebSite y nuevamente clic en Crear nueva carpeta. 11° Escriba el nombre: Aplicaciones. 12° Clic en Abrir. Figura 3. 9 Ahora observe la nueva ruta donde se guardan sus aplicaciones. Figura 3. 10 13° Al final de la ruta aumentamos el nombre de la aplicación: \App01 Nota: El último nombre de la ruta de ubicación de almacenamiento crea una nueva carpeta y además toma el nombre de la aplicación. Figura 3. 11 14° Después de haber escrito su ruta de almacenamiento, pulse clic en Aceptar. Después de haber dado clic en Aceptar, aparece la ventana de codificación y una ficha con el nombre Default.aspx. Figura 3. 12 15° En primer lugar, seleccione la vista Código haciendo clic en el botón Código en la parte inferior de las fichas de la página. Figura 3. 13 Nota: Visual Studio 2008 genera automáticamente código que usted pueda empezar. 16° Desde la barra de menús, pulse clic en el menú Ver. 17° Clic en Cuadro de Herramientas. Figura 3. 14 Nota: Si ya posee un cuadro de herramientas activo, puede obviar estos pasos. 18° En el Cuadro de herramientas, pulse clic en Estándar y observe todos los controles. Casi todo lo visual que necesita está en el Cuadro de herramientas, y la mayoría de la codificación ASPX se realiza arrastrando un objeto desde el cuadro de herramientas estándar a la ventana de codificación. Nota: Esto también sería buen momento para activar la ventana de depuración, Pulse clic en el menú Ver y luego clic en Lista de errores. Figura 3. 15 Observe la siguiente imagen que muestra una vista general de las herramientas activadas hasta estos momentos. Figura 3. 16 19° Pulse clic en el objeto Label del Cuadro de herramientas. Figura 3. 17 20° Realice un arrastre hacia la ventana de codificación y sitúelo entre las etiquetas <div> y </div> Figura 3. 18 Tan pronto como el objeto Label este en su lugar y suelte el botón del ratón, se genera automáticamente el código ASP.NET entre esas dos etiquetas. Figura 3. 19 Nota: Más adelante verá lo que sucede si activamos la vista Diseño, pero por ahora, nos centraremos en el código único. 21° A continuación necesita añadir un poco de código C#. Vamos a abrir la ventana de código C#, pulse clic en Ver. 22° Luego clic en Código. Figura 3. 20 Puede ver que el “Code Behind” (Código subyacente) se encuentra y utiliza en conjunción con el código ASP.NET. Figura 3. 21 Nota: Tenga en cuenta que el nombre del código C# es el mismo como el archivo ASP.NET (ASPX) excepto que se incluye una extensión .CS. Figura 3. 22 Por lo tanto, los archivos Default.aspx y Default.aspx.cs pueden ser vist os como “ir juntos” y cuando empiece a colocar archivos en su servidor, tendrás que ver que se coloquen juntos en una carpeta de la aplicación. Nota: Más tarde verá como utilizar otros nombres “Default” para sus aplicaciones. 23° En la ventana de código C#, encuentre la línea que empiece con: protected void Page_Load(object sender, EventArgs e) 24° Pulse clic al final de la primera llave (línea 16) y luego pulse la tecla Enter para crear una nueva línea (Línea 17). 25° Escribe: Label1. Observe que cuando comienza a escribir Label1 aparece una ventana emergente como lo muestra la siguiente imagen. Figura 3. 23 Este es la ventana IntelliSense, el cual reconoce objetos de los archivos ASP.NET. CVUando usted arrastra el objeto Label al escenario, se da automáticamente el ID de “Label1” en el código ASPX. Las características IntelliSense reconocen todos los objetos e instancias en el código ASPX y utiliza los IDs existentes de forma para ayudar a crear los códigos necesarios en la ventana de C#. Utilice sus teclas direccionales para resaltar Label1 en la lista y pulse Enter para que la palabra aparezca automáticamente en el código. Nota: Desafortunadamente, es fácil confundirse de Label (un objeto) y del ID automático de Label1. 26° Una vez que aparece Label1 en la ventana de código, escribe un punto (.). Tan pronto como escriba el punto (Algunas veces llamado periodo), aparece el menú IntelliSense otra vez y muestra todas las diferentes propiedades y otros elementos asociados con la clase Label como lo muestra la siguiente imagen. Figura 3. 24 27° Utilice las teclas direcciones para desplazarse hasta Text en la ventana IntelliSense. Figura 3. 25 28° Pulse la tecla Enter. Ahora verá Label1.Text. 29° Después de Label1.Text agregue: ="Esta aplicación ASP.NET 3.5 es escrita por <Tu nombre>"; Nota: En C# necesitas agregar un punto y coma al final de cada declaración, pero usted no pone en las líneas finales de ASP.NET. Figura 3. 26 30° Pulse clic en el menú Archivo y luego clic en Guardar todo. Figura 3. 27 Nota: También puedes pulsar Ctrl + Mayus + S. Esta acción guarda ambos archivos, CS y ASPX. Usted siempre necesitará grabar ambos archivos cuando pruebe su programa. Importante: En la cadena de texto de la codificación en C#, aparece <Tu nombre> indicando que debes escribir tu nombre pero no debes poner los símbolos menor y mayor. SI lo haces, entonces no aparece nada a la hora de ver la página, esto es porque C# reconoce los símbolos menor y mayor como una etiqueta. 31° Ahora vamos a probar la aplicación, pulse clic en el menú Depurar. 32° Clic en la opción Iniciar sin depurar o pulse Ctrl + F5. Figura 3. 28 Si bien esta aplicación es un poco mejor que el ejemplo “Hello World”, esto muestra el procedimiento esencial para crear scripts en ASP.NET y C# utilizando Visual Studio 2008. Para tener una visión general, en la siguiente sección se examinará el código de ambos archivos ASPX y CS. Figura 3. 29 3.5 Pregunte a los expertos ¿Por qué aparecen errores en la ventana Lista de errores cuando escribo un código? YO tomaría a la ventana de la Lista de errores como un no preocupante bicho que se encuentra en el trabajo. Cada vez que completes una línea de código, si es el formato correcto, el mensaje desaparece. Pero en lugar de ver a la ventana Lista de errores como un quisquilloso bicho, tenga en cuenta que en realidad es su mejor amigo, y le ahorrara horas en la depuración de código. 3.6 Archivos ASPX y C# Más código generado automáticamente en ambos archivos ASP.NET y C# que se ingresan escribiendo. Entender lo que Visual Studio 2008 ha hecho y lo que tendrá que hacer puede ser mejor logrado cuando se establecen los dos archivos. Las siguientes dos sub-secciones explican todo el código generado y lo que se añade por el desarrollador (usted). 3.6.1 El archivo ASPX En primer lugar, examinaremos ASP.NET como un todo. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"> </asp:Label> </div> </form> </body> </html> En su mayor parte, este script se parece mucho al estándar XHTML. De hecho, parece como una simple pagina de vainilla en HTML. Sin embargo, la primera línea tiene mucho más información que un típico HTML. Se ha desglosado en 3 segmentos. <%@ Page Language="C#" Este primer segmento de la página permite saber el lenguaje que se utiliza es C# y no VB o algún otro lenguaje. El siguiente segmento tiene un Booleano especial, AutoEventWireup, y requiere una explicación más extensa. AutoEventWireup="true" El Booleano AutoEventWireup indica si las páginas ASP.NET están automáticamente conectadas a funciones del manipulador de eventos. Con C#, el valor predeterminado es True, también las paginas están conectadas a las funciones del manipulador de eventos. AL final de la sección se indica el nombre del archivo C# y lo que hereda. Como vimos anteriormente, Visual Studio 2008 asigna automáticamente un nombre de archivo a al archivo de código ASP.NET que se utiliza, y dado que el nombre del archivo ASP.NET es Default.aspx el archivo de código es Default.aspx.cs. Esa parte es bastante sencilla. CodeFile="Default.aspx.cs" Inherits="_Default" %> El atributo Inherits, se refiere al nombre de la clase que hereda el código. Esto puede ser un poco confuso porque en C# la referencia para una clase que hereda a otra es simplemente con el símbolo dos puntos (:). Por ejemplo, en el código C# verá el ejemplo… public partial class _Default : System.Web.UI.Page Esto significa que la clase _Default hereda la clase System.Web.UI.Page. En el archivo ASPX, el atributo Inherits simplemente apunta a la calse que hereda la página. 3.6.2 El archivo C# Las primeras 11 líneas del script están utilizando directivas que indican que los espacios de nombres estén disponibles. Porque son parte de una plantilla, esto un todo o único propósito cuando se abre el archivo del código C# en la plantilla. De hecho, si se quita todo pero la primera directiva se utiliza, la aplicación trabaja perfectamente bien. En el panorama general del script, tenga en cuenta que todas las directivas predeterminadas son innecesarias. Por el momento, sin embargo, dejémosle tal y como está. using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Label1.Text = "This ASP.NET 3.5 application written by Your Name"; } } La definición de la clase C# empieza con la línea: public partial class _Default : System.Web.UI.Page Esta declaración que anuncia el nombre de la clase es _Default y que hereda System.Web.UI.Page. Desde un punto de vista estricto en C#, la clase parcial le permite dividir un clase dentro de en más de un solo archivo. Esto es útil cuando tiene una gran clase o tiene múltiples desarrolladores trabajando en una sola clase con diferentes asignaciones. El compilador considera que varios archivos de clases parciales son una sola clase, porque la parte interna no se ha modificado. Cuando traba con archivos ASP.NET (ASPX) y C#, puede considerar los archivos ASPX y los archivos CS como código fuente para múltiples partes de las clases parciales. Estrictamente hablando, esto no es totalmente preciso, pero para todos los fines prácticos, es una manera útil de considerar sobre los valores de una clase parcial en C# con un archivo ASP.NET. Más preciso, las clases parciales de C# permiten declarar todos los controles del lado del servidor que ha declarado en su archivo ASPX. Además, las clases parciales permiten automáticamente generan código que se almacena en un archivo temporal desde el código generado. Así, a lo largo de este libro, usted verá los tipos de modificación parcial en una definición de clase. La palabra clave Public especifica la accesibilidad de la clase como disponibles para otra clase. La mayoría de las clases son inicialmente definidas como Public, y si deseas delegar la clase para otra clase, esto será accesible. (Encontrará más de la clase y objetos modificados en el próximo capitulo, cuando C# sea revisado con más detalles) EN la declaración de clase, la clase hereda toda la clase System.Web.UI.Page. Esto significa que todas las propiedades en System.Web.UI.Page estan disponibles en la clase de nombre _Default. A lo largo del libro, usted verá muchas propiedades y otros elementos de la clase System.Web.UI.Page (clase Page) en uso. Por ejemplo, IsPostBack, el cual se discutirá más adelante, es una propiedad que se usará, que es parte de las clases Page. Las funciones claves en el código C# trabaja con una función integrada que actúa como un manipulador de evento, Page_Load(). protected void Page_Load(object sender, EventArgs e) El evento simplemente espera hasta que la página sea cargada para lanzar independientemente lo que dice el código. Por defecto, la función Page_Load() es un todo del script C#, y si lo ignora, no sucede nada. Si usted va a utilizar otros manipuladores de eventos, tales como Hacer clic en un botón, pueden quitar la función. Los parámetros son estándares y son utilizados para pasar cualquier información que necesitase. Como los ejemplos que requieren los parámetros que aparecen en el libro, su uso se muestra en la ilustración. Como conocen del trabajo a través del ejemplo, la línea…. Label1.Text = "Esta aplicación ASP.NET es escrita por Handz Valentín"; Es lo que agrega utilizando Visual Studio 2008. Recuerde que Label es un form de un Web form ASP.NET, y Text es una de las propiedades del form. Además, tener en cuenta que los formularios se ejecutan en el servidor, y la única manera para que el código del archivo ASPX se ejecute es atreves del vinculo del archivo ASPX al archivo C# y la herencia de sus clases. En este punto, no es necesario esperar a comprender todo. En el ejemplo utilizado se muestra como utilizar Visual Studio 2008 y no como trabajar en conformidad con C# y ASP.NET. Sin embargo, deberías ser capaz en ver una imagen general del proceso de desarrollo de aplicaciones utilizando Visual Studio 2008. Además, tenga en cuenta que Visual Studio es enorme, y como vaya progresando a través del libro, usted encontrará más elementos de esta importante herramienta de desarrollo. En la próxima sección, verá un poco más de lo que puede hacer con Visual Studio 2008 y como se puede utilizar para darle exactamente lo que usted quiera. 3.7 Más herramientas de Visual Studio 2008 Para ver más útil las herramientas en Visual Studio 2008, puede cambiar la codificación de ASP.NET en el ejemplo que ha desarrollado en este capitulo. El siguiente conjunto de pasos empieza con su pagina ASP.NET (Default.aspx) y agregar propiedades para salidas eventuales. 1° Si no ha abierto la pagina Default.aspx en Visual Studio 2008, hágalo ahora. Pulse clic en el menú Archivo. 2° Señale Abrir, aparece una lista de opciones. 3° Clic en Archivo…. Aparece el cuadro de dialogo Abrir archivo. Figura 3. 30 4° En el cuadro de dialogo Abrir archivo, navegue hasta encontrar el archivo Default.aspx. 5° Clic en Abrir. Figura 3. 31 Nota: Si ya tenía abierto el archivo Default.aspx, entonces puede obviar los pasos anteriores. 7° Sitúe el cursor hacia la derecha después de <asp.Label ID="Label1" y pulse Enter para agregar una salto de línea. A continuación reemplace el código actual por el siguiente: runat="server" Text="Label" /> Figura 3. 32 8° Elimine la siguiente etiqueta: </asp: Label> Figura 3. 33 9° Pulse clic en el menú Ver. 10° En la lista desplegable, pulse clic en la opción Ventana propiedades o pulse F4. Figura 3. 34 Nota: Si ha configurado Visual Studio 2008 anteriormente, quizá ya tenga activo la ventana de Propiedades. Figura 3. 35 11° Seleccione la etiqueta Label <asp:Label como lo muestra la siguiente imagen. Figura 3. 36 Al seleccionar esta etiqueta, la ventana Propiedades muestra las opciones del control. 12° Sitúe el cursos entre Text="label" y /> y pulse Enter. Figura 3. 37 13° En la ventana de Propiedades, seleccione ForeColor, 14° Al lado derecho de la Propiedad ForeColor escribe: AntiqueWhite. Ahora pulse la tecla Tab. AL pulsar la tecla Tab, en la ventana de código ASP.NET se mostrará ForeColor=”AntiqueWhite” y en la ventana de Propiedades se mostrará AntiqueWhite. (Vea la siguiente imagen) Figura 3. 38 15° Sitúe el cursor entre =”AntiqueWhite” y /> y pulse Enter. Figura 3. 39 16° Seleccione BackCOlor en la ventana Propiedades. Debería ver un boton al lado derecho con 3 puntos. Figura 3. 40 17° Clic en el botón de puntos. Aparece el cuadro de diálogo Más colores. 18° Clic en el color que desee. 19° Clic en Aceptar. Figura 3. 41 A veces cuando seleccionas un color, verás un nombre en el cuadro Nombre, tal como lo ve en la siguiente figura. Figura 3. 42 Otras veces no verá ningún nombre. Si no ves ningún nombre, como es el caso del color con valor 990000, verás un valor Hexadecimal en la ventana Propiedades expresado como #990000 (o cualquiera que sea el valor hexadecimal) Figura 3. 43 20° Pulse Ctrl + F5 para ver como ha quedado su página. Debe ver su página con el color de texto blanco (ForeColor) y con el fondo del Label en el color elegido. Figura 3. 44 3.8 Pregunte a los expertos ¿Por qué algunos colores tienen nombres y otros no, y como fueron seleccionado esos nombres? Los nombres de los colores .NET fueron seleccionados de un conjunto estándar conocido como X11. Hasta ahora estoy tratando de averiguar porque existen nombres como “aqua” y no “cyan” y en que lugar del mundo lo llaman “papaya whip”. El propósito más importante de la Ventana Propiedades y el menú emergente IntelliSense es aprender el código en ASP.NET y C#. Con literalmente miles de clases y cada clase con sus propias propiedades, métodos y eventos, Visual Studio 2008 le ahorra una enorme cantidad de tiempo. Obviamente un buen libro de referencia de ASP.NET y C# le ayudarán, pero con tantas clases, opciones, parámetros, eventos y declaraciones, su trabajo será muy fácil con la versión computarizada en Visual Studio 2008. En el transcurso de este libro, se le mostrará como sacar el máximo partido de ambos, Visual Studio y los programas escritos utilizando ASP.NET y C#, y como los nuevos elementos son introducidos, también verá como se hace uso de una de las muchas herramientas en Visual Studio 2008. 3.9 Otras herramientas para el desarrollo de ASP.NET con C# Además de utilizar Visual Studio 2008, puedes utilizar otras herramientas también. Dado que Visual Studio 2008 es solo para Windows, los que trabajan con computadores Macintosh u otros sistemas operativos que no sean Windows, tales como Linux y UNIX, necesitan otras herramientas. 3.9.1 Dreamweaver Para Macintosh y sistemas Windows, encontrarás el popular programa de desarrollo Web Dreamweaver de Adobe que tiene soporte para ambos, ASP.NET y C#. Dado que ASP.NET es nuevo, necesitas tener cualquier versión de Dreamweaver que se libera después de la versión oficial de ASP.NET 3.5 para garantizar la plena compatibilidad. Si tienes una versión anterior de Dreamweaver, sin embargo, todavía puedes tener una valiosa ayuda de Dreamweaver. Por ejemplo, la siguiente imagen muestra como Dreamweaver tiene un menú contextual que muestra la selección de Web forms de ASP.NET y otras opciones disponibles. Figura 3. 45 También debería notar en la imagen anterior que en lugar de colocar el código C# en un archivo CS independiente utilizando una clase parcial, Dreamweaver utiliza el método de script incrustada al inicio de la línea 4. <script language=C#> Dependiendo de cómo le guste trabajar con el code-behind de C#, esta alternativa incrusta estilos que pueda o no ser de su preferencia. Utilizando Dreamweaver, tendrás para utilizar un servicio de alojamiento online de ASP.NET porque no podrá probar sus aplicaciones como usted los desarrolla en Visual Studio. 3.9.2 POTE (Plain Old Text Editor) SI no tiene más que un simple editor de textos (o prefiere escribir sus propios códigos sin ayuda), puede hacerlo con cualquier editor que guarde el código como texto sin formato. Para sistemas tales como MAC OS o LINUX, puede no tener cualquier otra alternativa, así que utilice un editor de textos que funcione bien para el desarrollo de código. Puede tener que escribir y grabarlo como un archivo ASPX con incrustaciones C#. De hecho, puede escribir utilizando code-behind en C# si se quiere, pero no se puede compilar el C# a menos que el lugar de sus aplicaciones se encuentre dentro de un servicio de alojamiento que compilará C# y ASP.NET juntos. Si está utilizando MAC y el editor de textos TextEdit, necesitará cambiar las preferencias predeterminadas en su editor. El formato predeterminado de TextEdit es Rich Text Format (Formato de texto enriquecido RTF) y tiene que cambiar a texto sin formato. Para hacerlo siga estos pasos: Seleccione TextEdit., luego Preferencias y luego Texto sin formato (radio button) como lo muestra la siguiente imagen. Figura 3. 46 Como puede ver en la figura anterior, el código es idéntico al que se genera con Visual Studio 2008, y un archivo independiente de C# se hace referencia. Si guardar el código fuente como un archivo ASPX y CS, respectivamente, se debería trabajar bien con un servicio de alojamiento ejecutando IIS7 y ASP.NET 3.5. Por lo tanto, en lo posible, implica más trabajo y acceso a un servidor IIS7. 3.10 Training Max 1: Descargar Visual Web Developer 2008 Express Edition. Vamos a descargar este IDE para comenzar a trabajar con códigos ASP.NET. Recuerda que este programa es una versión ligera de Visual Studio 2008 y no tiene todos los componentes para trabajar en modo profesional, pero por ahora aprenderemos a descargar este programa. Nota: Puedes utilizar este programa para realizar sus prácticas. En este libro, se utiliza Visual Studio 2008. 1° Abrir su explorador Internet Explorer. 2° En la Barra de direcciones escribe: http://www.microsoft.com/express/download/ 3° Pulse Enter para ingresar a la página. 4° En la sección Visual Web Developer 2008 Express Edition, pulse clic en la flecha del cuadro desplegable y seleccione el idioma Spanish, que es el que dominamos. Figura 3. 47 5° Al lado derecho, pulse clic en Descargar. 6° Guarde el instalador en algún directorio y comience a descargar. Instalando Visual Web Developer 2008 Express Edition en Windows XP 3.10.1 Visual Web Developer 2008 Express Edition Si tiene instalado versiones prelease de Visual Web Developer Express, Visual Studio 2008/Orcas, SQL Server, SQL Server Express o .NET Framework 3.5, yo recomiendo desinstalarlos para iniciar con un sistema tan limpio como sea posible. Siempre utilice utilidad de desinstalación de Windows para eliminar Software. En Windows XP, siga estos pasos: 1° Ingrese al Panel de control desde el menú Inicio. 2° Cambie a la Vista Clásica para tener una mejor visión de sus iconos. 3° Doble clic al icono Agregar o Quitar programas (En Windows Vista es Programas y características). 4° Seleccione el programa a desinstalar. 5° Clic en Cambiar o Quitar. Como ha visto pasos atrás, se puede descargar una copia libre de Visual Web Developer 2008 Express Edition desde el Sitio Web de Microsoft. La instalación completa se describe en esta sección, el cuál requiere 3.5 GB de espacio en disco (Unidad C:) y un total de 447 MB para la descarga. Si alguna parte de la instalación falla, regrese al Web Site de Microsoft (mostrado en pasos anteriores), e inicie el proceso otra vez, el instalador deberá iniciar desde donde se detuvo. 3.11 Training Max 2: Instalando Visual Web Developer 2008 Express Edition 1° Después de haber descargado el instalador de Visual Web Developer 2008 Express Edition, pulse doble clic sobre el instalador. Espere algunos segundos mientras carga los archivos para la instalación. 2° En la pantalla de Bienvenida del asistente de instalación, pulse clic en el botón Siguiente. Figura 3. 48 Nota: Puede activar la casilla de verificación Sí, enviar a Microsoft Corporation información sobre la instalación, de está manera entregas información anónima a Microsoft sobre el proceso de instalación. 3° En la pantalla de los términos de licencia, lea cada palabra de la licencia, consulte a alguien experto (su abogado) y luego clic en la opción He leído y acepto los términos de la licencia. 4° Clic en Siguiente. Figura 3. 49 5° En la pantalla Opciones de instalación, verifique que estén activos todas las casillas de verificación para poder descargar los programas respectivos, en este caso, SQL Server 2008 Express Edition y Silverlight Runtime. Nota: Anteriormente también se podía descargar MSDN Library (La biblioteca) pero ahora lo puede hacer por separado desde el sitio Web de Microsoft. 6° Clic en Siguiente. Figura 3. 50 7° En la pantalla Carpeta de destino, verifique la ruta donde se almacenará el archivo. Pulse clic en Instalar: Nota: Si desea puede cambiar la ruta de instalación de Visual Web Developer 2008 Express Edition. Figura 3. 51 8° Ahora debemos esperar que se complete la descarga de algunos programas e instale Visual Web Developer 2008 Express Edition. Figura 3. 52 9° Después de esperar un promedio de una hora, el programa ya se encuentra instalado. Clic en Salir y reinicie su equipo. Figura 3. 53 Hasta este punto, usted tiene el software instalado y listo para asumir un giro. En esta sección, crearás una página sencilla para que pueda explorar el entorno. SI está impaciente para tomar un largo proyecto, de un salto hasta otro capitulo más avanzado y a continuación regrese para “Ajustar su entorno de desarrollo” más tarde en este capitulo para algunos consejos de configuración. 3.11.1 Iniciar el IDE Podemos iniciar cualquier programa que tenga la integración con entornos de desarrollo, en este caso puedes utilizar Visual Web Developer 2008 Express Edition, en caso de no tener instalado Visual Studio 2008. En este ejercicio también puedes utilizar Visual Web Developer 2008 Express Edition en un entorno Windows XP. Training Max 3: Crear un Web Site ASP.NET 1° Al abrir Visual Studio 2008 o Visual Web Developer 2008 Express Edition, pulse clic en el menú Archivo, señale Nuevo y clic en Sitio Web. Figura 3. 54 2° En el cuadro de diálogo Nuevo sitio Web, pulsa clic en Sitio Web ASP.NET para elegir esta plantilla. Figura 3. 55 3° En el cuadro Ubicación, verifique que se encuentre de la siguiente manera. Figura 3. 56 4° Pulse clic en Aceptar. 5° En la ventana de código, pulse clic en la ficha Diseño. Figura 3. 57 6° Pulse clic sobre el rectángulo que se encuentra en la parte superior del panel de Diseño. Figura 3. 58 Observe que aparece una representación de una etiqueta en HTML <div> y además muestra una ficha. 7° En el cuadro de herramientas, arrastre el control Button y sitúelo dentro del rectángulo que posee la etiqueta <div>. Figura 3. 59 8° En el panel de Diseño, pulse clic en la ficha Dividir. Observe que ahora puede ver tanto el diseño de la página como el código autogenerado. Figura 3. 60 9° Clic en el menú Ver, señale Regla y cuadricula y luego clic en Mostrar Regla. Observe que aparece una regla en el área de Diseño, más no en el área de Código. 10° Pulse clic en el menú Archivo y luego clic en Guardar todo. 11° Nuevamente clic en el menú Archivo y clic en Cerrar. Se cierra la página de ASP.NET. Nota: Admito que esta página es muy simple, pero nos ha ayudado a conocer un poco más de la interfaz de Visual Studio 2008 o Visual Web Developer 2008 Express Edition. Capítulo 4: C# y ASP.NET 3.5 Este capitulo le proporciona los principios de C# pronunciado (see-sharp). Un muy pequeño subconjunto de C# que es utilizado con la mayoría de aplicaciones ASP.NET, pero si entiendes lo básico de C#, serás capaz de hacer mucho más con lo que necesita utilizar en C#. Aunque Visual Studio 2008 escribe buena parte del código C# para usted, sabiendo que C# esta ayudándole en su desarrollo con ASP.NET. 4.1 C# 3.0 y ASP.NET 3.5 Como ha visto en los capítulos anteriores, Visual Studio 2008 crea una clase parcial en C# cuando usted comienza a desarrollar paginas Web ASP.NET. Llegando a entender lo que hace C# y como está estructura se puede lograr a partir con los fundamentos de C#, aunque estos fundamentos no pueden ser vistos inmediatamente en el pequeño código que todos ustedes utilizan en aplicaciones básicas ASP.NET. 4.2 Casos, Nombres de variables e Instancias La primero para entender C# es que a diferencia de algunos lenguajes, C# es sensible a las mayúsculas y minúsculas. Esto significa que cuando hace referencia a una variable o instancia de clase en C#, necesitas estar seguro de que la referencia de nombres tomen en cuenta las mayúsculas y minúsculas del nombre. Por ejemplo, las siguientes tres variables son todas diferentes: merryWidows MerryWidows Merrywidows Por lo tanto, si quiere utilizar la referencia MerryWidows, no puede utilizar… merryWidows MERRYWIDOWS merrywidows Debe utilizar MerryWidows y punto. En su mayor parte, probablemente no querrá simplemente cambiar las mayúsculas y minúsculas de los diferentes caracteres para crear diferentes nombres de variables. Por ejemplo, si tienes dos diferentes variables para el nombre: Perro Peruano. perroPeruano Perroperuano Es muy probable confundirse usted mismo y cualquier persona que esté trabajando con usted en el desarrollo de una aplicación. Aunque la sensación de Mayúsculas y minúsculas permite diferenciar entre los nombres de la variable, no significa que tenga que hacerlo. Solo tenga en cuenta que todas las etiquetas necesitan ser claras al contexto de su uso, y utilice nombres como: PerroPeruano1 PerroPeruano2 PerroPeruano3 Están mucho más claras estas simples diferencias utilizando combinaciones de casos. Sin embargo, puede hacer la vida mas simple nombrando instancias utilizando minúsculas para el inicio de los nombres de clases. perroPeruano1 perroPeruano2 perroPeruano3 Por ejemplo, supongamos que ha desarrollado una clase y lo nombró Monitor. Cuando comience a declarar una instancia de la clase Monitor, puede querer utilizar lo siguiente: Monitor monitor = new Monitor(); Después, cuando esta utilizando el objeto monitor (Instancia), es fácil de recordar como una instancia de la clase Monitor. Si necesitas varias instancias de la clase Monitor, entonces querrá tener alguna forma de distinguir entre las instancias, tales como: Monitor redMonitor = new Monitor(); Monitor greenMonitor = new Monitor(); Monitor blueMonitor = new Monitor(); La regla de dirección en todas las etiquetas es utilizar sentido común en l os contextos del proyecto. Dado que, solo recuerde que sus etiquetas son sensibles a las mayúsculas y minúsculas. Nota: Si está familiarizado con JavaScript, Java, C++, o ActionScript 3.0, encontrará muchas de las mismas estructuras y formatos que están en C#. Con el tiempo, los lenguajes de Internet como C# y JavaScript tendrán un conjunto subyacente común de estructuras en cumplimiento de determinadas normas estándar European Computer Manufacturers Association (ECMA). Encontrará diferencias, pero ECMA se está convirtiendo como un lenguaje estándar. Para el completo estandarizado en C#, vea www.ecma-international.org/publications/standards/Ecma-334.htm. 4.3 Tipos, Declaraciones y Expresiones Como muchos lenguajes de programación, C# alterna con diferentes tipos de datos. Por ejemplo, puede estar familiarizado con tipos numéricos y cadena. Los números pueden ser utilizados para cálculos matemáticos, y cadenas, para el almacenamiento de texto. Asignando un valor para una variable se requiere el tipo de datos para ser incluidos en la declaración de la variable. Por ejemplo, las siguientes dos variables representan una declaración integer y una declaración string. string myString; int myNumber; Un lenguaje que requiere un tipo por variable, constantes y objetos es un lenguaje estrictamente escrito, así mismo C# puede ser considerado como estrictamente escrito. Cada instrucción completa, si es simplemente para declarar una variable o algunas operaciones más complejas, es llamada statement (declaración). Cada declaración se termina con un punto y coma (;) y si el punto y coma se deja fuera, se produce un error. Una vez que usted ha declarado una variable, puede entonces asignar un valor. Por ejemplo, utilizando la variable que acabamos de declarar, podríamos escribir… myString = "Happy programming"; myNumber = 45; y las variables contienen los valores que asignamos. Cualquier tipo de declaración que resulte en un valor que se asigna a una variable, constante u objeto es llamado expression. Una expresión puede, o bien ser una simple asignación, o puede ser mas compleja e implica cálculos y incluso las variables a escribir. Por ejemplo, las siguientes declaraciones son expresiones de una variable type (declarar un tipo de variable) y asignarle un valor compuesto de valores calculados y otras variables (anotherNumber) y una combinación de cadenas literales y una cadena variable (anotherString): int myNumber = 45 + (anotherNumber - 3); string myString = "Name: " + anotherString + " Smith"; Una vez que haya estructurado su variable, se puede ejecutar en problemas como intentar asignar el tipo incorrecto de valores para una variable. Por ejemplo, la siguiente asignación devuelve 2 errores. int myNumber = "Calculate this: 2 * 10"; string myString = 33 * 22; En el primer caso, la variable numérica esta asignado a una cadena literal (una cadena literal, es un valor real) Cualquier expresión encerrada entre comillas es tratada como una cadena literal. En el segundo caso, no solo son los valores para una cadena de valores numéricos, sino también las expresiones contienen un operador numérico (*) para la multiplicación. 4.3.1 Detalles de los tipos Diferenciar entre números y cadenas es bastante fácil. La cosa se hace un poco difícil cuando comience a ver los diferentes tipos de datos. Con texto, los dos tipos básicos de datos son string y char. El tipo de dato char contiene un solo carácter de texto tales como a, b, c, 5 o @ (Cada carácter es un carácter Unicode). Un tipo de dato string contiene una serie de caracteres Unicode, tales como “Eres mi @mor”. El tipo de dato char requiere una menor reserva de memoria porque cada valor es la misma longitud. El tipo de dato string requiere más memoria porque la cantidad de memoria depende del número de caracteres. También, Tanto los números y cadenas son diferentes, por lo tanto son tipos char y string. Por ejemplo, el siguiente código lanzaría un error… char myCharacter = "Top of the morning!"; //Error! Porque más de un solo carácter Unicode es el valor asignado para un tipo de variable char. La mayoría de los ejemplos de C# que se verán en este libro utiliza el tipo de dato string. Con tipos numéricos, encontrará muchos más tipos. En el sentido más básico, puede dividir tipos de números dentro de un conjunto de números (integers) y números de punto flotante (contienen fracciones) Puede también dividir tipos de números firmados (puede tener ambos valores positivo y negativo) y sin firma (solo positivos y negativos) Finalmente, los tipos que se encuentra bien son construidos en (Intrinseca) o creados a partir de clases e interfaces. Usted estará utilizando intrínsecas y basado en lo tipos de clase. Tipo C# Tipo .NET byte bool short ushort long Byte Boolean Int16 Ulnt16 Int64 ulong Ulnt64 int Int32 uint float Ulnt32 Single double Double decimal Decimal Descripción Bytes bits) Enteros sin signo (0-255) 1 Verdadero o falso 1 Enteros con signo de -32,768 a 32767 2 Enteros sin signo de 0 a 65,535 2 Enteros con signo de -9 ,223,372,036,854,775,808 8 a 9,223,372,036,854,775, 807 Enteros sin signo de 0 a 8 18,446,744,073,709,551,615 Enteros con signo de –2,147,483,648 a 4 2,147,483,647 Enteros sin signo de 0 a 4,294,967,295 4 1.5 × 10−45 to 3.4 × 1038, 7-digitos de precisión 4 (requiere f o F al final del literal) 5.0 × 10−324 to 1.7 × 10308, 15-digitos de 8 precisión (requiere d o D al final del literal)) 1.0 × 10−28 to 7.9 × 1028, 28-digitos de precisión 12 (Requiere m o M al final del literal) (8 La tabla anterior es un esquema común de tipo de números intrínsecos que probablemente lo utilice. Usted encontrará que escribiendo datos le ayudará a organizar su programa. Sin embargo, porque se trata de datos procedentes de la entrada de estructuras en ASP.NET, necesita considerar las traducciones de la entrada de datos utilizando formularios ASP.NET y análisis de datos C#. 4.4 Pasando valores entre ASP.NET y C# Utilizando los formatos de clases parciales que conectan ASP.NET a C#, debe ser consiente que los nombres creados en ASP.NET son utilizados por C#. Por lo tanto, en cualquier discusión de C# y ASP.NET, tiene que entender como trabaja el nombramiento. En ejemplos anteriores, usted vio algunos ejemplos de código C# asignando valores, y aquí vamos a tener una vista final a la conexión entre lo que ASP.NET establece y como C# puede utilizar estructuras de ASP.NET. Tomemos por ejemplo la siguiente tarea. - Dos valores de entrada del usuario. El primer valor es multiplicado por 85 y el segundo por 15. La respuesta muestra la suma de los productos. Este es un problema bastante simple. En el lado de ASP.NET, establecer 2 TextBox para ingresar los valores y un Label para mostrar el total. En adición, necesitaras un Button para resaltar un evento para el total de los dos valores y agréguelos juntos. Asi mismo, en ASP.NET usted tiene algo como la siguiente configuración: <asp:TextBox ID="ScoreA" runat="server"/> <asp:TextBox ID="ScoreB" runat="server"/> <asp:Button ID="Calc" onclick="Do_Calc" runat="server"/> <asp:Label ID="Total" runat="server"/> Todo lo que el usuario tiene que hacer es ingresar dos valores; La parte C# de la clase parcial debe utilizar la entrada de valores, hacer las matemáticas y entonces mostrar los resultados para el Label ASP.NET llamado Total. En primer lugar, observar la lista C# (menormente innecesaria el estado Using automáticamente incluido) y entonces considerar como C# primero toma la información y luego la envía de vuelta a ASP.NET. using System; public partial class _Default : System.Web.UI.Page { private double s1; private double s2; protected void Do_Calc(object sender, EventArgs e) { s1 = Convert.ToDouble(ScoreA.Text) * .85; s2 = Convert.ToDouble(ScoreB.Text) * .15; Total.Text = Convert.ToString(s1 + s2); } } La primera cosa que se hace en la parte de C# es para declarar dos variables para manejar la entrada. Ambas variables son escritas como doublé (una intrínseca del tipo numérico) y establecer con un modificador prívate (Variables con un modificador prívate son accesibles solo desde el código en la clase cuando estas son declaradas) A continuación, el código establece un método para la clase que se inicializa por un clic en el botón. protected void Do_Calc(object sender, EventArgs e) Este código utiliza el Do_Calc del evento que maneja la línea de ASP.NET. <asp:Button ID="Calc" onclick="Do_Calc" runat="server"/> El resto del método convierte los datos ingresados como cadena a números reales para ser utilizados en el cálculo. Por ejemplo, la línea C#... s1 = Convert.ToDouble(ScoreA.Text) * .85; Tome lo que ha ingresado en el TextBox en la parte de ASP.NET la clase dentro de un número (un doublé) y asigne los valores para la variable S1. Incluye el texto de la multiplicación de ASP.NET que tiene que ser convertida a un número de punto flotante (El tipo doublé en este caso) por 85. El campo TextBos con el nombre de referencia (ID) de ScoreA originado en la línea… <asp:TextBox ID="ScoreA" runat="server"/> En ASP.NET. Va en la dirección opuesta, para que aparezca el resultado de la multiplicación y adición para el campo Label (Total), los valores numéricos tienen que ser reconvertidos a texto como la siguiente línea C# que muestra: Total.Text = Convert.ToString(s1 + s2); Asi mismo, en la misma manera que la clase Convert utiliza el método ToDouble para convertir de una cadena a un número, ToString convierte de nuevo a cadena que puede ser utilizado en la salida del tipo Label. Piense de esto como una ida y vuelta a partir de la estructura ASP.NET y el motor C# para poner en marcha los eventos de usuario o eventos desde algún otro estado en el programa. 4.5 Estructuras Básicas C# En esta sección, vamos a mirar las estructuras básicas C# independientemente de ASP.NET. Entonces en los ejemplos, verá como estas estructuras son utilizadas en conjunto con ASP.NET en una clase parcial. Sin embargo, por el momento esta sección se centra en la estructuras C#. 4.5.1 Variables y Constantes Como implicaba en la sección anterior en este capitulo, una variable es un contenedor, como estructura utilizada para almacenar datos. Los datos en el cont enedor pueden cambiar en valor o variar; por lo cual, el término variable. Como se vio en la discusión anterior, necesita proporcionar variables con un tipo, y no puede pasar el valor de un tipo de variable a una variable de un tipo diferente de variable. Por lo tanto, si usted coloca un valor decimal dentro de un tipo de variable decimal, encontrará de todo para trabajar bien. Más si coloca el valor de una variable dentro de otra del mismo tipo, su programa trabaja. Una constante es como una variable en el que sus valores se almacenan, pero a diferencia de una variable, una constante representa un valor inmutable. Por ejemplo, el valor de la constante matemática Pi es inmutable, y por colocar este valor dentro de una constante, usted asegura que algún otro valor no influenciará. En realidad, cualquier valor puede ser colocado dentro de una constante, ya sea este absoluta como el valor de Pi o el punto de congelación del agua o algún otro valor que usted quiera para su programa. Digamos que tiene un programa que verifica por votación legal edades de 18 que calcula a edades basadas en la fecha actual o fecha de cumpleaños. La edad de votación tiene que ser constante, mientras usted espera el cambio de la fecha actual o fecha de cumpleaños. Entonces, supongamos que la edad de votación cambia de 18 a 21 porque su cálculo se basa en un país diferente. El único valor que debería necesitar cambiar es la constante que mantiene la edad de votación. Utilizando constantes y variables del mismo tipo, juntos funcionan bien. Por ejemplo, las siguientes declaraciones calcularán la multa de valores: const int VAGE = 18; int yourAge = 35; int legalAge; legalAge = yourAge - VAGE; //Expresión utilizando Variables y Constantes El aspecto importante de los scripts no es si un elementos es una variable o constante, pero si los tipos de la variable o contante son los mismos. En este caso, ambas, variables y constantes son del mismo tipo, int; por lo tanto, trabajan juntos. El siguiente par de script ilustra como C# y ASP.NET utiliza constantes y variables en armonía. 4.5.2 ASP.NET COnVar <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConVar.aspx.cs" Inherits="ConVar" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Constants and Variables</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="YourAge" runat="server" Text="19" /> </div> </form> </body> </html> 4.5.3 C# ConVar using System; public partial class ConVar : System.Web.UI.Page { private const int VAGE = 18; private int yourAge; private int legalAge; protected void Page_Load(object sender, EventArgs e) { yourAge = Convert.ToInt16(YourAge.Text); legalAge = yourAge - VAGE; YourAge.Text = Convert.ToString(legalAge); } } Que script exacto regresa el valor de 1. Esto es porque el objeto Label llamado YourAge tiene un valor Text de “19” y mientras que una cadena se convertirá en un entero por parte de la clase de C#. Intente cambiar el valor de 19 a algo relativamente contrario para la constante del valor de 18. Puede entonces obtener un número negativo. 4.6 Nombres convencionales Los nombres convencionales son solo convenciones. No son reglas, así su nombre de selección puede ser único, no siga las convenciones y todo puede funcionar todavía correctamente. Sin embargo, me parece que un conjunto consistente de convenciones de nombres es muy útil, y encontrará que una vez que tenga un conjunto estándar, usted y otros pueden comprender su código mucho mejor. Uno de los ámbitos cuando las cosas se ponen turbias en convenciones de nombres es con constantes. En la mayoría de lenguajes, las constantes se han escrito en mayúsculas. En los ejemplos anteriores, VAGE es un ejemplo de un nombre de constante siguiendo la convención de utilizar todas en mayúsculas para constantes. Dependiendo en que articulo de convención lea, y la fecha, encontrará diferentes convenciones sugeridas para nombres de constantes en C#. Lo siguiente son algunas diferentes convenciones aplicadas: 4.6.1 Todas en mayúsculas: Esta convención utiliza todas las letras en mayúsculas. Esto es solo para ser utilizados por constantes y comandos SQL. Por ejemplo, FREEZEPOINT es un identificador típico cuando se utiliza constante. 4.6.2 Tipo Camello También llamado “tipos mixtos” o “Inter tipos”, esta convención de nombres une a las palabras sin usar espacios o guiones bajos. La primera letra es minúscula, de ahí el nombre camello por lo de la joroba cuando una letra aparece en mayúscula. Por ejemplo, firstName es una variable que utiliza tipo camello. 4.6.3 Tipo Pascal Muy similar al tipo camello, el tipo Pascal comienza con mayúscula y entonces une la palabra con letras en mayúsculas. Usted encontrará que las clases y funciones construidas típicamente utilizan el tipo Pascal. Por ejemplo, CustomerList es un ejemplo del tipo Pascal cuando dos palabras son unidas dentro de una. Estas convenciones pueden ser de ayuda, y Microsoft intenta ayudar a más asuntos que ocasionalmente están en papel en blanco. En esta era de convergencia de lenguajes alrededor de los estándares ECMA, podría querer utilizar convenciones más generales que son confortables o que comunican más claramente entre un equipo de desarrolladores. Algunas convenciones pueden no estar a su gusto y/o no ser usados constantemente. Por ejemplo, varios desarrolladores prefieren utilizar un subrayado principal para nombres de variables privadas (Por ejemplo, _apples, o _fruitcake); Sin embargo, los nombres predeterminados de todas las clases parciales generados por Visual Studio son nombre de clases que comienzan con un subrayado (esto es, _Default) Sin embargo en este libro verá que en lugar de utilizar los nombres predeterminados, el nombre de la clase parcial son más descriptivos y no comienza con un subrayado. La decisión de no utilizar subrayados para los nombres de clase de una clase parcial está basado en el hecho que la denominación practica del subrayado principal es arraigado en algunos programadores como una indicación a una clase privada, método o variable. 4.7 Asignaciones Definitivas Antes de que una variable pueda ser utilizada, debe ser inicializada de alguna manera. Por lo que he visto, estas reglas parecen funcionar un poco diferente de un programa puro de C# y un hibrido único ASP.NET/C#. Generalmente una asignación definida significa que una variable necesita ser inicializada antes de su uso. En algunos casos, puedes asignar un tipo de dato tales como… private string myString; y entonces usar la variable aunque no se ha asignado su valor. Por ejemplo, suponiendo que tiene el siguiente script ASP.NET: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DefiniteAssn.aspx.cs" Inherits="DefAssn" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Definite assignment</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Show" runat="server" /> </div> </form> </body> </html> Todo este archivo ASPX proporciona un conveniente TextBox para la salida de la variable que está definida en la parte de C#. La parte de C# es donde puede ver las asignaciones definidas en el trabajo (o no). En primer lugar, verifique perfectamente si está bien formada la asignación definitiva para la variable cadena stVar. using System; public partial class DefAssn : System.Web.UI.Page { private string stVar; protected void Page_Load(object sender, EventArgs e) { stVar = "Test"; Show.Text = stVar; } } Cuando ejecuta, verá el valor Test que aparece en la ventana cuadro de text o. Si comenta la línea… //stVar = "Test"; Todo funciona bien. Nada aparece en la ventana cuadro de texto, pero el compilador no devuelve un error. Sin embargo, si comenta la línea… //private string stVar; Y deja en la declaración que proporciona la variable con el valor Test, tendrás un error. Eso es porque la variable no ha sido declarada. Si declara una variable en C# pero no se asigna a un valor (se inicializa) antes de ser usado, tendrá un error. Así mismo, mientras es una practica importante para tener en cuenta, la salida de un formulario ASP.NET es un poco más que perdonar que un solo programa C# que la salida para System.Console.WriteLine o algunas estructuras similares que no sean ASP.NET. 4.8 Operadores y Puntuaciones C# utiliza un completo conjunto de operadores para el estado de relaciones entre los elementos en expresión. Así mismo, un conjunto de puntuaciones establece demarcaciones entre diferentes unidades en las declaraciones. 4.9 Operadores Básicos La mayoría de operadores básicos son aquellos que tratan con asignaciones o bien con matemáticas. Si usted tiene experiencia con otros lenguajes de programación, puede ser pasar por alto que los operadores pueden diferir por diferentes lenguajes. C# no es diferente. Algunos de los operadores que está acostumbrado a usar pueden ser idénticos en C#, pero algunos pueden ser diferentes; así que preste mucha atención. 4.9.1 Operadores de asignación Los operadores de asignación son los más utilizados y muy sencillos. Representados por un sencillo signo “igual” (=), los operadores de asignación son utilizados para asignar un valor a los elementos del programa, que incluye propiedades, variables y constantes. La estructura básica es la siguiente: someProperty (operand) = (assignment variable) someValue (operator) Como lo ha visto aquí y en capítulos anteriores, los valores que pueden ser asignados a una variable dependen del tipo, pero por lo demás, el uso de los operadores de asignación son bastante simples y estandarizados. Lo siguiente es una expresión que muestra una típica asignación: string myString = "A string of pearls"; En algunos casos se puede querer más de una propiedades para ser asignada con el mismo valor. Por ejemplo, lo siguiente asigna la propiedad horizontal y vertical para el mismo valor: objHorizontal = objVertical = 55; Usando cadenas de asignaciones puede ahorrar tiempo e incluso ayudar a organizar sus asignaciones. 4.9.2 Operadores Matemáticos Los operadores matemáticos hacen bastante más de lo que esperaba, suman, restan y realizan otras operaciones matemáticas. La única excepción es añadir el signo (+). Si las variables son números o literales, añadir el sino suma una o más valores. Al igual que los operadores de asignación, puede tener múltiples operadores en una expresión. Si los elementos con los que trabaja son cadenas, entonces añada el signo de concatenación. Por ejemplo, lo siguiente mostrará como añadir un símbolo en una expresión que daría lugar a una concatenación: private string morning = "Good morning "; private string night = "Good night"; private string allDay = morning + night; //results Good morning Good night Símbolo + * / % ++ -Operadores compuestos += -= *= /= %= Descripción Adición (también concatena cadenas) Substracción Multiplica Divide Modulo o Residuo (Números enteros que quedan en una división) Incrementa por uno, puede ser pre o post incremento. Disminuye por uno, puede ser pre o post disminución. Toma el valor Toma el valor Toma el valor Toma el valor Toma el valor actual y suma el valor asignado actual y hace una resta del valor asignado actual y lo multiplica por el valor asignado actual y lo divide por el valor asignado actual y realiza el residuo del valor asignado El incremento y disminución de los operadores se encuentran comúnmente en las estructuras de bucle (descritos mas adelante en este capitulo). Se usan para sumar o restar automáticamente 1 del valor actual de la variable. Los operadores compuestos son una combinación de operadores matemáticos y los operadores de asignación. Son utilizadas automáticamente para tomar el valor de la variable y entonces, hacen las matemáticas en relación con el valor de la variable. Por ejemplo, lo siguiente muestra como un operador compuesto podría ser utilizado para añadir un 8 porciento de impuesto para un elemento: using System; public partial class CompoundOp : System.Web.UI.Page { private decimal cost; private decimal tax; protected void Page_Load(object sender, EventArgs e) { cost = 29.95m; tax = .08m; cost += (cost *= tax); Total.Text = Convert.ToString(cost); } } La variable costo utiliza un operador compuesto de adición para agregar en si mismo el valor de los costos multiplicado por la variable impuesto utilizando un operador compuesto de multiplicación. 4.10 Pregunte a los expertos ¿Qué hace los caracteres m en los literales para los valores de costo e impuesto? Cuanto asigna valores literales a un decimal del variable o constante, tiene para añadir el carácter m para distinguir los valores integer, doublé o algunos otros tipos no decimales. Note, sin embargo, que las variables que contienen valores decimales no necesitan incluir m. 4.11 Operadores de relación Cuando dos o más elementos en una expresión están comparados, los operadores relacionales Booleanos generan valores True o False. EN general, los valores del mismo tipo son evaluados como iguales el uno del otro o de algún modo, diferentes. La siguiente tabla muestra los principales operadores relacionales y una breve descripción de lo que hacen. Los operadores relacionales son utilizados ampliamente con declaraciones condicionales dentro y fuera de los bucles. Pueden ser utilizada para establecer el valor Booleanos de las contantes o variables. Lo importante para recordar es que los operadores relacionales always evalúan true o false. Considere el siguiente código: int first = 10; int second = 20; bool same; same= (first == second); //same resolves to false Simbolo == != > < >= <= Descripcion Igual a No es igual Mayor que Menor que Mayor o igual que Menor o igual que Básicamente el script le pregunta si 10 y 10 son iguales, y porque no , la variable Booleana, same, se evalúa como false. Más adelante en este capitulo, verá como el resultado Booleano son utilizados en declaraciones condicionales para el control de estructuras condicionales y bucles. 4.12 Comparación de cadenas En algunos lenguajes, puedes comparar cadenas utilizando los mismos operadores para comparar valores numéricos. si lo intenta en C#, caerá rápidamente en la ejecución de un error. Para comparaciones de cadenas, use la clase String y el método Compare. El método Compare utiliza el siguiente formato: int numVal = String.Compare(String1, String2); Al evaluar si una cadena es superior o no, utilice el método String.Compare() para colocar la primera letra en la cadena con respecto a su posición en el alfabeto. Si la letra es anterior a otra letra, entonces se considera Menor que. Asi mismo, la letra a es menor que la letra b y le resta del alfabeto. Tambien, una letra minúscula es menor que su homologo en mayúscula. Sin embargo, si una letra en minúscula es superior en el alfabeto que una en mayúscula, se resuelve por el mayor. Por otra parte, la misma letra en diferentes casos no son iguales. Solo las letras del mismo caso y valor son considerados iguales. La siguiente tabla muestra 3 resultados y su significado: Resultado -1 1 0 Significado La segunda cadenas es superior que la primera cadena. La primera cadena es superior que la segunda cadena. Ambos son iguales Como puede ver, este tipo de resultado relacional utilizando el método String.Compare() es muy diferente del resultado Booleano encontrado cuando compara números. 4.13 Operadores lógicos Al respecto de muchos operadores lógicos que son similares a los operadores relacionales porque estos también tienen resoluciones Booleanas. La siguiente tabla muestra 3 operadores lógicos usados en C#. Resultado && || ! Descripción Lógico AND Lógico OR Lógico NOT Al igual que ocurre con los operadores relacionales, usted encontrará operadores lógicos usados en una buena cantidad de declaraciones condicionales. Estos son esenciales cuando se quiere probar más que una sola condición. Por ejemplo, si quiere planear un viaje en skí, quizá quiera saber si la temperatura es lo suficientemente fría para mantener la nieve y si la nieve está realmente sobre la tierra. Por lo tanto podría tener un código muy parecido a lo siguiente: bool temp = true; bool snow = true; bool both = (temp && snow); //both resolves to true Si solo quería que uno u otro sea verdadero, puede utilizar la declaración: bool either = (temp || snow); En su mayor parte, será utilizando los tipos de los operadores básicos que fueron discutidos en esta sección. C# también tiene operadores bitwise (bit a bit) que es poco probable que se utilice a menos que esté familiarizado con matemáticas binarias. 4.14 Símbolos en gramática y apuntadores Los símbolos de gramática y apuntadores son similares a los que se encuentran en otros modernos lenguajes de computadoras. La siguiente tabla muestra los ´principales símbolos no utilizados como operadores y como se utilizan en C#. Símbolo ; , {} [] () // /* … */ : Descripción Terminador de una declaración; también elemento delimitador de la declaración for Elemento separador de arrays Abrir o cerrar declaraciones condicionales, bucles, funciones y clases Elemento delimitador de array Parámetros delimitadores Líneas simples para comentarios Bloque de comentarios Delimitadores de caso en declaraciones switch. También utilizados en declaraciones de clase heredadas de una súper clase. La mayor parte de gramáticas y puntuaciones se entienden mejor en el contexto de su uso, incluso cuando se utiliza un listado parcial de todos los símbolos gramaticales y puntuaciones como en la tabla anterior. Cuando se piensa en diferentes estructuras en C#, note como estos símbolos son empleados correctamente. 4.15 Declaraciones condicionales Al ver los diferentes operadores, puede ver que la mayor parte de los resultados, cuando las comparaciones se hacen, van a ser booleanas. Esencialmente, una declaración condicional utiliza un Booleano para tomar un camino u otro. A menudo, las condiciones no son mas que hacer algo o no hacer algo. Sin embargo, en otros momentos una declaración condicional necesita elegir entre una u otra rama 4.15.1 If y Else La mayoría de declaraciones condicionales básicas es la declaración if. Este formato es el siguiente: if(condition) { //do something } La condición es una expresión usando un operador relacional tales como varA > varB o Booleano. Por ejemplo, lo siguiente utiliza un Booleano para determinar si Mary más joven que Juan. int Mary = 20; int Juan = 21; bool compare = (Mary < Juan); if(compare) { //output Mary es más joven que Juan } Con una singular condición de prueba, puede estructurar dos resultados específicos utilizando la declaración else en el siguiente formato: if(condition) { //take path A } else { //take path B } El siguiente ejemplo utiliza dos cuadros de texto ASP.NET, y en función a los resultados, en la parte C# el script utiliza una declaración if/else determinando cual de los dos valores es mayor. 4.15.2 ASP.NET# SimpleIf <%@ Page Language="C#" AutoEventWireup="true" CodeFile="SimpleIf.aspx.cs" Inherits="SimpleIf" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Simple Conditional</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"/> Number 1 <p/> <asp:TextBox ID="TextBox2" runat="server"/> Number 2 <p/> <asp:Button ID="Compare" runat="server" Text="Compare" onclick="DoCompare" /> <p/> </div> </form> </body> </html> 4.15.3 C# SimpleIf using System; public partial class SimpleIf : System.Web.UI.Page { private int n1; private int n2; protected void DoCompare(object sender, EventArgs e) { n1 = Convert.ToInt16(TextBox1.Text); n2 = Convert.ToInt16(TextBox2.Text); if (n1 > n2) { TextBox1.Text = n1 + " is greater"; } else { TextBox2.Text = n2 + " is greater"; } } } Cuando prueba el script, ingrese dos diferentes valores enteros; el cual muestra a uno como mayor, tal como la siguiente imagen. Figura 4. 1 Para manejar una sola condición, puede utilizar una serie de if o else if las declaraciones utilizan el siguiente formato. if(conditionA) { //do A } else if (conditionB) { //do B } Cuando se enfrenta a mas de una sola condición a resolver, la declaración else if hace un truco. Esto puede tener una pequeña confusión cuando tiene varios resultados alternativos para evaluar. 4.16 Switch Cuando tienen varios diferentes resultados, else if se vuelve algo engorros, pero trabaja bien. Una mejor alternativa que else if es la declaración switch, el cual puede manejar cualquier números de valores condicionales. La declaración switch toma el valor de una sola variable y entonces, examinar varios diferentes casos para decidir cual utilizar. Gran parte de declaración switch también contienen una declaración break al final para que se encuentren casos coincidentes, la búsqueda se detienen inmediatamente. La declaración switch tiene el siguiente formato general: switch (someVar) { case value1: //do action A break; case value2: //do action B break; } La declaración switch le permite tratar fácilmente con varios valores condicionales. En función al valor del caso, puede tener su programa tomando un amplio rango de acciones deseadas. Le resulta útil cuando necesita tener más que un simple o solo unas pocas opciones disponibles para iniciar. Uno uso al que usted puede colocar la declaración switch está en clasificar los resultados generados por el valor String.Compare que se muestra en la tabla del titulo Comparación de cadenas (en este capitulo) Cada de tres posibles valores que el método String.Compare genera es tratado como casos separados. Asi mismo los casos podrían ser… case 1: case -1: case 0: En función a los casos que generen sus scripts, las acciones tienen al programa haciendo cosas diferentes. La siguiente aplicación SwitchCom proporciona un ejemplo de cómo aplicar la declaración switch. 4.16.1 ASP.NET SwitchCom <%@ Page Language="C#" AutoEventWireup="true" CodeFile="SwitchCom.aspx.cs" Inherits="SwitchCompare" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Switch Compare Strings</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"/> &nbsp;Enter first string</div> <p/> <asp:TextBox ID="TextBox2" runat="server"/> Enter second string <p/> <asp:Button ID="Compare" runat="server" Text="Compare Strings" onclick="DoCompare" /> <p/> <asp:Label ID="Output" runat="server" Text="Results" /> </form> </body> </html> 4.16.2 C# SwitchCom using System; public partial class SwitchCompare : System.Web.UI.Page { private int n1; protected void DoCompare(object sender, EventArgs e) { //In using String.Compare the following outcomes //are possible: //-1 means that the first string is less than the second //1 means that the second string is less than the first //0 means the values are equal n1 = String.Compare(TextBox1.Text, TextBox2.Text); switch (n1) { case -1: Output.Text = TextBox1.Text + " is less than " + TextBox2.Text; break; case 1: Output.Text = TextBox2.Text + " is less than " + TextBox1.Text; break; case 0: Output.Text = "The two strings are identical"; break; } } } La siguiente imagen muestra que dos cadenas con el mismo caso son resuelto como idénticas. Figura 4. 2 SIm embargo, la salida en la siguiente imagen indica que las primeras cadenas son menores que la segunda cadena. Note que la sola diferencia entre los dos es que las primeras cadenas son todas en minúscula y la segunda cadena tiene un solo carácter en mayúscula. Figura 4. 3 En el ejemplo, puede ver exactamente como va en el método String.Compare y utilizarlas mejor en sus propias aplicaciones. 4.17 Pregunte a los expertos En el ejemplo anterior, no ocurre nada si los números son iguales. ¿Como tratar con valores que son iguales? Si solo utiliza una condición, utilice el operador mayor o igual que, la condición de igualdad pueda ser incluida. 4.18 Bucles Los bucles generan acciones repetidas hasta que alguna condición se cumpla. Como la mayoría de lenguajes, C# posee diferentes tipos de bucles, dependiendo en la situación en la que se encuentre. Cada bucle completo es llamado Iteracion, y los bucles pueden tener como muchas o como pocas iteraciones como necesite. Sin embargo, usted debe ser cuidadoso al tener algunos tipos de condiciones que dará por terminado el buble. Diferentes tipos de bucles tienen diferentes formas de crear las terminaciones de condición, y en la siguiente subseccion, verá los bucles primarios que utilizará en C#. 4.18.1 For Loop Cuando usted quiera completar un número especifico de iteración en un bucle, For loop tiene una simple estructura. for (loop variable initial; termination condition; change loop variable) { //statements } Generalmente, usted verá el inicio del bucle con una variable entera, seguido por una declaración de terminación utilizando un operador relacional, y terminado por un incremento o decremento de la variable. Por ejemplo, el siguiente bucle establece el principio del valor de la variable de bucle a 0 y los controles para ver que el tiempo sea menor a 12, las iteraciones continuan. for (int loopvar = 0; loopvar < 12; loopvar++) En este caso, se tiene la iteración 12 con el valor loopvar de 0 – 11. Para ver un uso visual del bucle For, la siguiente aplicación ilustra como la variable de bucle cambia con cada iteración. 4.18.2 ASP:NET Loop.aspx. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Loop.aspx.cs" Inherits="LoopTest" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>For Loop</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Output" runat="server" Width="450" Height="30" /> </div> </form> </body> </html> 4.18.3 C# Loop.aspx.cs using System; public partial class LoopTest : System.Web.UI.Page { private int loopcount; protected void Page_Load(object sender, EventArgs e) { for (loopcount = 0; loopcount < 25; loopcount++) { Output.Text += loopcount + "-"; } Output.Text += "End of loop"; } } Cuando usted prueba esta aplicación, verá una larga y estrecha caja de texto con los valores desde 0 a 24 y entonces el mensaje de que el final del bucle se ha alcanzado. La clave en la línea de bucle es el siguiente: for (loopcount = 0; loopcount < 25; loopcount++) La variable entera loppcount inicia en 0, y cada momento a través del bucle, la declaración de controles ve si loopcount es menor que 25. Si es asi, entonces uno es agregado a la variable loopcount (loopcount++) y se ejecuta el bucle otra vez. La siguiente figura muestra los resultados que puede esperar ver. Figura 4. 4 Usted puede realizar la misma acción con cada iteración, o puede usar la variable de bucl para generar diferentes resultados. 4.18.4 Foreach Loop El bucle foreach es un de mis favoritos porque puedes recorre un objeto con una incógnita y/o cambiar la colección de elementos. Por ejemplo, un objeto array contiene cualquier numero de elementos de tipos específicos. Utilizando el bucle foreach, usted proporciona una variable escrita que quiera para la salida del objeto, y el bucle itera a través del objeto hasta que se recogen todos los elementos y hace disposición de usted. foreach (type myLoopVar in myObject) { //do something //myLoopVar is treated as a //standard variable } El poder de las características de estos tipos de bucles es la capacidad para analizar las propiedades de un objeto y enviarlas a cabo hasta que el objeto esté vacio. Tipicamente, encontrará que estos tipos de bucles se utilizan con un objeto array, y el siguiente objeto utiliza un array de cadena para ilustrar su uso. Por lo tanto, en un bucle for, necesita escribir la variable de iteración, pero no en un bucle foreach. 4.19 Pregunte a los expertos En el ejemplo la variable de bucle es inicializada como una variable privada fuera del bucle de declaración ¿Por qué es eso? Esto es mas un asunto de estilo que de cualquier convención o necesidad. Me gusta recoger todas mis variables y ponerlas en un solo lugar. Entonces cuando yo puse el bucle, no tuve que ingresar el tipo, reduciendo el desorden. El único problema con ese estilo es que cuando tienen varios diferentes bucles y desea guardar cada local y reutilizar su bucle favorito nombre de variable, puede ocasionar conflicto. 4.20 ASP.NET ForEach.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ForEach.aspx.cs" Inherits="ForEach" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Foreach</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Output" height="100" runat="server" TextMode="MultiLine" /> </div> </form> </body> </html> 4.21 C# ForEach.aspx.cs using System; public partial class ForEach : System.Web.UI.Page { private string[] myArray; protected void Page_Load(object sender, EventArgs e) { myArray = new string[5]; myArray[0] = "More memory"; myArray[1] = "Sound card"; myArray[2] = "Monitor"; myArray[3] = "Terabytes drive"; myArray[4] = "Faster processor"; foreach (string s in myArray) { Output.Text += s + "\n"; } } } Como puede ver en el resultado, el bucle foreach marcha verdaderamente a través del array y sacadas todas las cadenas y puestas en un campo TextBox. Tambien note la parte ASP.NET de la aplicación donde la propiedad TextMode es ajustado a “MultiLine”, Estas configuraciones permiten la salida para ser colocados en líneas separadas coomo lo muestra la siguiente figura. Figura 4. 5 Mantener el bucle foreach en mente para excavar a través de un conjunto de datos que se ha enviado a un array. Generalmente, los diferentes controles en ASP.NET pueden hacer un buen trabajo de tratar con datos mostrados desde una base de datos, pero para ciertos tipos de análisis de datos, usted se alegrará conocer como trabajar con el bucle foreach. 4.22 While Loop El bucle While Loop tiene dos diferentes implementaciones. La primera es como un bucle que verifica la condición en la parte superior del bucle. 4.22.1 ASP.NET While LoopWhile.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoopWhile.aspx.cs" Inherits="WhileLoop" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>While Loop</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Output" runat="server" Width="450" Height="30" /> </div> </form> </body> </html> 4.22.2 C# LoopWhile.aspx.cs using System; public partial class WhileLoop : System.Web.UI.Page { private int loopcount; protected void Page_Load(object sender, EventArgs e) { loopcount = 25; while (loopcount > 0) { Output.Text += loopcount + "-"; loopcount--; } Output.Text += "End of Loop"; } } Este bucle tiene la condición directamente al principio. Si la variable loopcount es o o menor, No iterar a través del bucle de una sola vez, pero se dirigirá inmediatamente al mensaje End of Loop (Fin del bucle). Sin embargo, porque elvariable contador se establece en 25, esto toma 25 iteraciones antes de la variable 0. La siguiente imagen muestra lo que verá cuenta atrás. Figura 4. 6 La característica importante para tener en mente cuando utiliza el bucle While es que no debe iterar todo si la condición se resuelve en falso en el primer intento a través del bucle. La siguiente sección muestra un bucle similar pero con una importante diferencia. 4.23 Do Loop En algunas ocasiones, necesita un bucle que iterará al menos una vez, y esto es cuando el bucle do while (o solo do) se encuentra útil. La condición para verificar la terminación es en la parte inferior del bucle, mientras las acciones para el bucle están en la parte superior. Este tiene la estructura: do { //Loop actions } while (condition); Como usted puede ver, las acciones ocurren antes de la condición while que evalúa un valor Booleano. Asi mismo cuando desea tomar algunos tipos de acciones, incluso si el valor Booleano resuelve como false al primer intento a través del bucle, use el bucle do. El siguiente ejemplo ilustra como trabajar. 4.23.1 ASP.NET DoWhile.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DoWhile.aspx.cs" Inherits="DoWhile" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Do Loop</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Output" runat="server" Width="450" Height="30" /> </div> </form> </body> </html> 4.23.2 C# Do DoWhile.aspx.cs using System; public partial class DoWhile : System.Web.UI.Page { private int loopcount; protected void Page_Load(object sender, EventArgs e) { do { Output.Text += loopcount + "-"; loopcount++; } while (loopcount < 25); Output.Text += "Loop Ends"; } } Cuando prueba el programa, verá el resultado en la siguiente imagen. Figura 4. 7 Esto se parece a los otros, pero tiene un significado diferente. El valor en la primera iteración es 0, el valor predeterminado de un tipo entero inicializado. Esto ocurre porque la variable loopcount no incrementa hasta después de que los valores se colocan en el cuadro de texto. Por lo tanto, no importa que, en la primera iteración se pondrá un valor en la variable iteración, incluso si este excede del valor condicional. Eso es, si la variable loopcount era establecido inicialmente en 75, podría seguir apareciendo en la salida del cuadro de texto porque el bucle do while itera siempre al menos una vez. Básicamente, las diferencias entre do while y el bucle while es la condicional Booleana siendo el inicio o el fin del bucle. Para todos los propósitos prácticos significan que sus aplicaciones, necesitan iterar al menos una vez o ninguna en absoluto. 4.24 Arrays Los arrays son estructuras de datos que contienen múltiples elementos. Cada elemento de un array es el mismo objeto o variable con valores. Cada uno de los valores en cada elemento de una array deben ser del mismo tipo. Por ejemplo, un array tipo entero puede solo contener enteros, y un array tipo cadena colo pueden contener cadenas. A modo de orientación, los arrays en C# en realidad vienen en mas que un sabro incluidos los simples arrays que serán discutidos aquí. Sin embaroc, C# también tiene ArrayLists y Stacks que tienen características familiares para el uso de arays en otros lenguajes dem programación. Por ejemplo, los métodos push() y pop() son utilizados en arrays en otros lenguajes para añadir o quitar elementos desde los arrays. Usted no encontrará estos métodos en un array estándar C#, pero encontrará ambos métodos en la clase Stack. Asi mismo, si usted está familiarizado con arrays desde otros lenguajes de programación, está seguro de comprender el concepto general de array, pero debido a la precisa forma en que son usados en C#, usted podría querer prestar mucha atención en esta discusión. 4.24.1 Creando Arrays Usted puede utilizar diferentes métodos para una instancia de un array. Del mismo modo, asignando valoras a los arrays se pueden hacer de diferentes maneras. Probablementes la mejor manera para pensar acerca de la creación de arrays es imaginar una pila de cuadros de seguridad. Cada cuadro es considerado un elemento array, y la pila es el mismo array. Ademas, necesita especificar el número de cuadros necesarios y el tipo de contenido de cada cuadro que llevará a cabo. Por ejemplo, una pila de cuadoros pueden mantener solo Joyas y otra pila mantener solo Monedas. Sin embargo, la pila con la sjoyas no pueden mantener monedas y viceversa. Con esto en mente, echemos un vistazo como una array puede ser una instancia. La forma general para la declaración de un array es como lo siguiente: type[] arrayLabel; Por ejemplo, lo siguiente crea un array de cadena nombrado stringSlots: string[] stringSlots; A diferencia de una variable, los arrays necesitan algunos tipos de indicaciones de cómo muchos elementos residirán, asi mismo cuando estos son instancias, necesita indicar el tamaño que es. Lo siguiente crea un array con 44 elementos disponible para los datos: stringSlots = new string[44]; Cuando los valores no son asignados a una array de cadena, cada uno tiene un valor nulo. El array entero por defecto es 0. Sin embargo, puede asignar valores a elementos de array en inicialización. Por ejemplo, los siguientes dos ejemplos asignan 3 valores de elementos a un array de cadena: string[] stringSlots = new string[3] { "apples" , "oranges" , "pears" }; string[] stringSlots = { "apples" , "oranges" , "pears" }; La primera inicialización requiere un paso extra, asi mismo la mayoría de desarrolladores utilizan lo segundo. La longitud del array es implícita por tres elementos que son los valores entre llaves( { } ). Si usted no conoce lo que los valores van a ser, puede asignar valores para una directa referencia a un índice array después el array tienen que ser inicializado. Por ejemplo, la siguiente secuencia muestra un array de cadena que es declarada, inicializada y tienen datos añadidos para especificar elementos: string[] stringSlots; //declared stringSlots = new string[44]; //initialized stringSlots[28] = "Nancy"; //value added to element 28 stringSlots[43] = "Joe"; //value added to element 43 Como vio en el ejemplo foreach en el listado de código C# (ForEach.aspx.cs), las herramientas son disponibles por los bucles a través de los elementos de array ambos para añadir y recuperar datos. Nota: Los elementos arrays son índices de base cero. Así mismo, el primer elemento es 0, y la ultima longitud array es menos 1. Asi con una longitud de 44, el último valor del índice para el array seria 43. Por lo tanto la declaración… stringSlots[43] = "Joe"; seria el elemento número más alto en el array stringSlots. Metodos Array Los arrays se ven y actúan como una gran cantidad de tipos incorporados, y en su mayor parte, es como son tratados. Sin embargo, Estos son, en realidad un objeto de System.Array, el cual tiene el conjunto de métodos y una sola propiedad que puede ser utilizado con el array simple. La siguiente tabla muestra un ejemplo de los métodos System.Array disponibles y como son utilizad los métodos System.Array disponibles y como son utilizados. Método AsReadOnly BinarySearch Clear ConvertAll Copy CopyTo CreateInstance Find Uso Devuelve una capa de sólo lectura para el conjunto especificado. Busca algoritmos binarios utilizados para encontrar elementos. Restablece todos los elementos en 0 o nulo. El tipo de array es cambiado (por ejemplo, convierte tipo entero a cadena. Copia rango de elementos desde un array a otro. Como el método Copy(), pero copia todos los elementos. Nueva instancia de clase inicializada Array. Metodo de búsqueda para encontrar elementos que coincidadn con los criterios de búsqueda. Encuentra primera instancia. FindAll GetType GetValue IndexOf LastIndexOf Resize Reverse SetValue Sort Como Find(), exepto que encuentra todos los elementos. Se utiliza para obtener el tipo de instancia actual. Se utiliza para obtener el elemento valor de array. Es un array unidimensional devuelve el índice de la primera ocurrencia de valor. Es un array unidimensional devuelve el índice de la ultima ocurrencia de valor. Cambia el tamaño de un array para especificar un nuevo tamaño Invierte el orden de los elementos en un array. Establece un valor para un determinado elemento en un array. Todos los elementos de arrays ordenados. 4.24.2 Propiedad Length en un Array La única propiedad en un System.Array es length. La longitud de un array se refiere al número de elementos que posiblemente puedan contener, pero en general se refiere al número real de elementos en un array. Tenga en cuenta que los elementos de array son basados en cero, significa que el primer elemento es 0. Por ejemplo, un array con tres elementos seria tener lo siguiente: myArray[0] = "First" myArray[1] = "Second" myArray[2] = "Third" La longitud se basa en uno. Por lo tanto mientras un elemento puede ser referenciado como 0, este es el primero de cualquier número de elementos en el array. 4.24.3 Utilizando Arrays Ahora que ha visto los principales elementos de array, sus métodos y propiedades, este siguiente ejemplo ilustra su utilización en una aplicación. El propósito es tomar un simple ejemplo con ambos arrays, numérico y cadena y añadir métodos claves para mostrar como trabaja con el. Note en particular como los métodos de array son utilizados. El formato… Array.Method(stringLabel) Ayuda a recordar que los arrays simples son realmente parate de la clase System.Array más que una característica incorporada independiente de la clase System.Array. Vea los métodos Reverse() y Sort() en la parte de C# del siguiente ejemplo. 4.24.4 ASP.NET ArrayTest.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ArrayTest.aspx.cs" Inherits="ArrayTest" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="Output" runat="server" TextMode="MultiLine" Height="170" Width="180" /> </div> </form> </body> </html> 4.24.5 C# ArrayTest.aspx.cs using System; public partial class ArrayTest : System.Web.UI.Page { string[] stringBox = { "Esperanza", "Caridad", "Paz", "Prudencia" }; int[] integerBox = new int[3] { 1944, 1492, 711 }; protected void Page_Load(object sender, EventArgs e) { Array.Sort(stringBox); Array.Reverse(integerBox); Output.Text += stringBox[0] + "\n"; Output.Text += stringBox[1] + "\n"; Output.Text += stringBox[2] + "\n"; Output.Text += stringBox[3] + "\n"; Output.Text += integerBox[0] + "\n"; Output.Text += integerBox[1] + "\n"; Output.Text += integerBox[2] + "\n"; Output.Text += stringBox.Length + "=String Array size\n"; Output.Text += integerBox.Length + "=Integer Array size\n"; } } Cuando ejecute el ejemplo, la siguiente imagen muestra lo que verá en pantalla. Figura 4. 8 El método Sort() cambia el orden de los valores de los elementos de array de: Esperanza (Hope) Caridad (Charity) Paz (Peace) Prudencia (Prudence) Para la salida en orden alfabético que ve en la imagen líneas arriba. Sin embargo, el método Reverse() invierte el orden de los tres enteros “1944, 1492, 711” a “711, 1492, 1944” La longitud de dos arrays mostrados en la salida de la imagen líneas arriba, es basado en los valores en la iniciación array en el ejemplo. Cada elemento se le da un valor en ambos arrays. Sin embargo, si usted inicializa unu array con 250 y no asigna un solo valor a cualquiera de los elementos, asigne valores a algunos ele,emtos y no a otros, o asigne 250 valores para 250 elementos, la longitud del array debería ser el mismo. Eso es, la longitud del array es basado en el numero de reserva de ranuras y no si cada ranura tiene un valor real no predeterminado. Capitulo 5: Hacer más con C# y ASP.NET Como necesita solo un poco de C# para trabajar con éxito con ASP.NET, no significa que no pueda utilizar todo el potencial de C# con sus aplicaciones ASP.NET. Este capitulo se profundiza un poco más allá en los eventos que pueden ser generados por diferentes herramientas ASP.NET y manejados por C#, y también muestra como acceder a clases completas C# desde una clase parcial formado por C# y ASP.NET. Sin embargo, ninguno de los capítulos anteriores ni siquiera este capitulo, hacen más que tocar la superficie de lo que puede hacer con C#. Para aprender más acerca de C#, necesita leer otro libro. 5.1 Eventos y manipulación En el capitulo anterior, usted ha visto un par de diferentes formas en que se manejan eventos C# conectados a formularios ASP.NET, también en la carga de una pagina o un botón de formulario. Sin embargo, diferentes objetos ASP.NET generan diferentes tipos de eventos, y en esta sección examinará como se hacen y proporcionan algunos ejemplos aparte de los que ha visto. 5.2 Añadiendo eventos de controles ASP.NET a C# Utilizando Microsoft Visual Studio 2008 le permite añadir eventos manejados ASP.NET a códigos C# de manera muy sencilla. Irónicamente, en lugar de generar código C# desde el modo Código de ASP.NET, deberá hacerlos desde el modo Diseño. El siguiente ejemplo muestra como generar eventos manejados C# utilizando los siguientes pasos: 1° Abrir Visual Studio 2008. 2° Crear un nuevo Sitio Web y guardar su aplicación en una carpeta de nombre EventWork. 3° Pulse clic en la vista Diseño. 4° Desde el cuadro de herramientas, arrastre un TextBox. Figura 5. 1 5° Debajo del TextBox, arrastre un Button. 6° Debajo del Button, arrastre un ListBox. 7° Inserte un control Label debajo del Cuadro de texto (TextBox). 8° En el panel de Propiedades, en la propiedad Text, escribe: Cuadro de texto. 9° Inserte dos etiquetas más debajo de cada control, y añada una etiqueta de texto como lo muestra la siguiente imagen: Figura 5. 2 10° Pulse clic en el control ListBox, al lado derecho del control ListBox aparece una flecha apuntando a la derecha, pulse clic en la flecha y aparece el menú Tareas de ListBox. Figura 5. 3 11° Clic en Editar elementos. 12° En el cuadro de diálogo Editor de la colección ListItem, pulse clic en el botón Agregar. Figura 5. 4 13° Pulse clic en Agregar dos veces para insertar dos elementos más. Ahora tendremos 3 elementos agregados. Figura 5. 5 14° EN la columna Miembros, pulse clic en ListItem del índice 0 (cero). 15° En la columna Propiedades de Item1, pulse clic en la propiedad Text y escribe: Elemento1. 16° En la propiedad Value escribe: Item1. 17° Seleccione ListItem del índice 1 de la columna Miembros, y cambien la propiedad Text por Elemento2 y Value por Item2. 18° Seleccione ListItem del índice 2 de la columna Miembros, y cambien la propiedad Text por Elemento3 y Value por Item3. 19° Pulse clic en Aceptar. Figura 5. 6 Observe como se va mostrando el diseño de la página. Figura 5. 7 20° Pulse doble clic sobre el control TextBox. Al hacerlo, usted será trasladado dentro del editor C# y verá el siguiente código generado: protected void TextBox1_TextChanged(object sender, EventArgs e) { } Para la inserción de código entre las llaves, puede atar el código a un evento en el TextBox que inicia el código cuando el texto en el cuadro es cambiado y pulse Enter. 21° Pulse doble clic sobre los controles ListBox y Button para generar sus códigos respectivos. Figura 5. 8 Además de cargar la pagina de evento, su código C# podría incluir 3 eventos manejados más, una por cada BUtton, TextBox y ListBox. 5.3 Añadiendo declaraciones para el manejo de eventos Sin nuestra participación en la hyperbole, la gran mayoría de código de eventos C# se estaría haciendo con ASP.NET incluyendo la adición de declaraciones para los eventos generados de la forma que se acaba de describir. Dependiendo de la naturaleza del proyecto, usted tendría diferentes declaraciones. En el siguiente ejemplo, usted puede ver diferentes tipos de declaraciones C# y estructuras que puede que quiera agregar. 5.4 ASP.NET EventWork.aspx <%@ Page Language="C#" Inherits="_Default" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Event Work</title> <style type="text/css"> .abGrey { font-family: "Arial Blackadder ITC"; color: #555555; } .grey { color: #555555; } </style> </head> <body> <form id="form1" runat="server"> <div> CodeFile="Default.aspx.cs" 1.0 Transitional//EN" <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged" CssClass="grey" AutoPostBack="true" /> <br /> <span class="abGrey">Cuadro de texto</span> <p /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Clic aquí" /> <br /> <span class="abGrey">Botón de comando</span> <p /> <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" Height="80px" onselectedindexchanged="ListBox1_SelectedIndexChanged" Width="80px"> <asp:ListItem Value="Item1">Item1</asp:ListItem> <asp:ListItem Value="Item2">Item2</asp:ListItem> <asp:ListItem Value="Item3">Item3</asp:ListItem> </asp:ListBox> <br /> <span class="abGrey">Cuadro de Lista</span> </div> </form> </body> </html> Nota: Para controlar el estilo de las aplicaciones ASP.NET, puedes agregar CSS tal y como lo haría en HTML o XHTML. Las dos clases CSS añadidas en el archivo EventWork.aspx simplemente ilustran como añadir código CSS. Esto incluye añadir estilos CSS para el control TextBox de ASP.NET, el cual requiere utilizar la propiedad CssClass. <asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged" CssClass="grey" AutoPostBack="true" /> 5.5 C# EventWork.aspx.cs using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TextBox1.Text = "Cargar Página"; } protected void TextBox1_TextChanged(object sender, EventArgs e) { TextBox1.Text += "*"; } protected void Button1_Click(object sender, EventArgs e) { TextBox1.Text = "Botón Pulsado"; } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { switch (ListBox1.SelectedItem.Value) { case "Item1": TextBox1.Text = "#1 Selected;"; break; case "Item2": TextBox1.Text = "#2 Selected"; break; case "Item3": TextBox1.Text = "#3 Selected"; break; } } } Cuando prueba su aplicación, verá todos los resultados presentados en el cuadro del TextBox, como muestra la siguiente figura: Figura 5. 9 Para ver como trabajan los eventos en el TextBox, escriba algo y pulse Enter, y verá “Cargar Página” como resultado. El evento actualiza la pagina y entonces añade un asterisco como requerido en el código de evento del TextBox. AL utilizar más y más controles ASP.NET, se introducirá más eventos y funciones en C#. En su mayor parte, lo que debe hacer es pulsar doble clic sobre un control en Microsoft Visual Studio 2008 en modo diseño para el correcto deposito de los métodos para aparecer en un listado de código C#. 5.6 Creando y Utilizando Clases ASP.NET y C# ambos tienen incorporado una riqueza de clases, pero puedes construir tus propias clases en C#. En C# como todos los lenguajes de programación orientado a objetos (OOP), una clase es una forma de resumen de algo. Por ejemplo, puede resumir un animal como un gato. Todos los gatos tiene ciertas características que son similares, pero en verdad, los gatos poseen valores únicos para sus características generales. En realidad los gatos en este ejemplo deberían referenciar como instancia del objeto Gato. Por ejemplo, el mismo resumen de gato se aplica a una gato casero quien realmente depende de sus dueños y su casa y un guepardo que se vale por si mismo en un medio salvaje. Cada vez que necesita un gato, puede utilizar la clase gato para proporcionar propiedades generales, y entonces todo lo que tienes que hacer es especificar las características de esas propiedades. Un gato casero y uyn guepardo ambos tienen velocidad para correr, pero un guepardo puede exceder a una velocidad de 60 Kph, mientras que un gato casero tiene una velocidad máxima de algo significativamente menor. Otras características y acciones para otro gato son contenidas en la clase para que cuando realmente necesite crear una instancia de gato, tengan características generales y especificas que usted puede incluir para un gato en particular. 5.7 Hacer una clase simple de C# Una clase real es una entidad muy flexible en programación. Hasta este punto en el libro, usted tiene que ver varios ejemplos de clases parciales en C#, y son en efecto un tipo de clase. Generalmente, las clases parciales que ha visto simplemente tienen un único evento que se define por defecto en Page_Load. El resto de la clase usualmente implica nada mas que colocar algunas declaraciones dentro de una función de manipulación de eventos. Una clase básica tienen típicamente lo siguiente: Lista de declaraciones utilizadas. La clase name. La clase constructor Variables (Instancias de variables privadas) Propiedades (De acceso publico para las variables) Métodos Las clases que usted creará son únicamente public. Esto significa que pueden ser accedidos desde otras clases, incluyendo clases parciales tales como puedo ver hasta ahora. Lo siguiente muestra las características genéricas de una clase simple (Los elementos claves han sido colocados en negrita). using System; public class MyClass { private string myProperty; public MyClass() { myProperty = "Some value"; } public string MyMethod(string paramName) { return myProperty + paramName } } Si usted utiliza Java, El formato debería parecerle muy familiar. Algunos otros lenguajes, como ActionScript 3.0, utilizan la palabra clave function para métodos, pero el enfoque general es el mismo. Para tener una mejor idea de cómo crear una clase pura de C# en un entorno ASP.NET en Microsoft Visual Studio 2008, la siguiente sección proporciona un ejemplo simple: 5.8 Mutators y Accessors En general, debería utilizar Mutators y accessors (También conocidos como “getters” and “setters”) con propiedades privadas. Usted podría utilizar accesors para obtener el valor de una propiedad y mutators para establecer un valor. Al hacerlo, usted encapsularía más de una variable. Sin embargo, para mantener las funciones de C# en un sitio Web de ASP.NET 3.5 relativamente corto, los accessors no podrán ser utilizados aquí. Para emplear un modelo getter/setter, utilice el formato: MiVariable { get { return MiVariable; } set { MiVariable = value; } } Sin embargo, como un aviso de una buena practica, la mayoría de las variables son definidas como privadas incluso a través de las funciones getters/setter que no se utilizan. 5.9 Creando el modulo ASP.NET Para empezar, crear un nuevo sitio Web de ASP.NET de la misma forma como crearía normalmente, el siguiente script ASP.NET solo tiene un simple cuadro de texto para la salida, por lo tanto empezar por crear como una lista en ClassOut.aspx. 5.9.1 ASP.NET ClassOut.aspx <%@ Page Language="C#" Inherits="_Default" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Utilizando recursos de clases exteriores</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="OutPut" Width="200" runat="server" /> </div> </form> </body> CodeFile="Default.aspx.cs" 1.0 Transitional//EN" </html> Como puede ver, los elementos ASP.NET tienen un aspecto bastante parecido a los que se han cubierto hasta el momento. Usted no necesita hacer algo para el archivo ASP.NET (.aspx) excepto que solo se utiliza una clase parcial de C#. 5.9.2 Añadiendo una clase C# Una vez que su archivo ASPX ha iniciado, seleccione Archivo, señale Nuevo y clic en Archivo en Microsoft Visual Studio 2008, y verá la ventana de Plantillas como lo muestra la siguiente figura. Figura 5. 10 Seleccione el icono Clase de C#, y añada un nombre para la clase con la extensión .cs. Figura 5. 11 Una vez que ya lo tenga hecho, clic en el botón Agregar. Tan pronto como usted hace clic en el boton Agregar, tendrá un cuadro de dialogo de Alerta como lo muestra la siguiente figura. Figura 5. 12 Clic en el botón Si. Esta acción crea una carpeta App_Code donde el archivo C# es colocado. Tan pronto como usted hace clic en el boton SI, verá que aparece la plantilla de clase C# en su ventana de código como lo muestra la siguiente imagen: Figura 5. 13 La plantilla de clase C# lista los mismos elementos utilizados como verá en la clase parcial de C# cuando aparezca por primera vez. Ahora, añada lo que desee a su clase, y entonces verá como instanciar una instancia de la clase en la clase parcial C#. Lo siguiente muestra un listado de una clase simple de C# que puede utilizar. 5.9.3 OutClass.cs using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; /// <summary> /// Clase de un metodo sencillo para enviar cadenas /// </summary> /// // Declarando una clase con la clase etiqueta public class OutClass { //Propiedad de la clase private string header; // La función constructor tiene el mismo nombre como la clase public OutClass() { header="Desde su clase:"; } //Método de clase public string sendMsg(string fromClass) { return header + fromClass; } } Esta clase tiene un solo método, sendMsg(), y una sola propiedad, header. Porque el método sendMsg() es publico, usted puede acceder desde otras clases. 5.9.4 Accediendo a la clase C# desde la clase parcial de C# EL paso final es para modificar la clase parcial de C# que es automáticamente generada. Abrir la clase parcial de C#, y dentro de la función Page_Load, comience a agregar código como muestra la siguiente figura. Figura 5. 14 Para crear una instancia de OutClass dentro de la clase parcial, simplemente declare la clase y entonces cree una instancia en la línea 9 como muestra la imagen anterior. Una vez tenga creada la instancia de la clase, IntelliSense reconoce el método OutClass, haciendo esto es muy fácil desarrollar con clases de usuario que ha desarrollado usted mismo. Al mirar toda la clase parcial de C#, puede ver la instancia de la clase de usuario que representa una puerta de acceso a cualquier clase en C#, no importa cuan simple o complejo sea. De manera que si usted ha creado sofisticados patrones de diseño en C#, usted puede crear una instancia en la clase parcial de C# conectado a ASP.NET asi como lo haría utilizando el editor de proyectos C# o cualquier otra herramienta que elija. El siguiente listado muestra como las clases parciales son vinculadas ambas a la clase de usuario (OutClass) y a un TextBox de ASP.NET, OutPut. 5.9.5 C# OutClass.cs using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { private OutClass outClass; private string fromClass; protected void Page_Load(object sender, EventArgs e) { outClass= new OutClass(); fromClass = outClass.sendMsg("La clase OutClass"); Output.Text = fromClass; } protected void OutPut_TextChanged(object sender, EventArgs e) { } } Una vez haya finalizado y guardado los tres módulos, pruebe su aplicación, Verá un resultado como muestra la siguiente imagen. Figura 5. 15 Al mirar la imagen de arriba, puede ver la contribución de cada uno de los tres elementos principales. La ventana muestra el texto (TextBox desde ASP.NET) “Desde su clase:” (Contenido de la propiedad de clase C#, header) “La clase OutClass” (Texto en el parámetro del método sendMsg desde la instancia de clase ClassOut en la clase parcial. Como puede ver, cada uno de los tres scripts hacen una contribución. La lección principal de esto, sin embargo, es que pueden acceder a clases y estructuras C# desde la clase parcial asociada con los controles y forms de ASP.NET. 5.10 Utilizando Interfaces Al igual que las clases, las interfaces en C# pueden ser utilizadas en conjunto con una aplicación ASP.NET. Generalmente, las interfaces son utilizadas en estructuras de mayor sofisticación, y aunque puede que no los necesite para aprender ASP.NET, conocer como utilizarlos con ASP.NET puede resultar valiosa con estructuras más avanzadas encontradas en la programación orientada a objetos o en patrones de diseño. Al igual que una clase, una interface es una abstracción a emplearse concretamente en implementaciones específicas. Generalmente, las interfaces asignan un grupo de funcionalidades relacionadas. Usted podría pensar de una clase como una abstracción de un objeto y de una interface como una abstracción de un método. Una interface no puede ser directamente instanciada, sino que debe ser instanciada desde una clase concreta que implemente una interface. Además, una buena practica clave es para un programa de interface y no para una implementación. Esto significa que la tipificación será la interface, pero la instancia es para la clase que implementa la interfaz. Para comprender mejor la interface y su uso, miremos un buen libro de OOP o C#. Aquí, usted verá como una interface puede ser utilizada con una aplicación Web en ASP.NET. En esta próxima aplicación de ejemplo, verá una sencilla interface con salida a un form ASP.NET. 1° Crear un nuevo Sitio Web en Visual Studio 2008. 2° Pulse clic en el menú Sitio Web y luego clic en Agregar nuevo elemento…. Figura 5. 16 3° En el cuadro de dialogo Crear nuevo elemento, en la sección Plantillas, pulse clic en Web Forms. 4° En el cuadro Nombre escribe: Iface.aspx. 5° Clic en Agregar. Figura 5. 17 6° Ahora añadiremos el siguiente código: 5.10.1 ASP.NET Iface.aspx <%@ Page Language="C#" Inherits="Iface" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> CodeFile="Iface.aspx.cs" 1.0 Transitional//EN" <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Ejemplo de interface</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" /> <br /> <asp:Label ID="Label2" runat="server" /> </div> </form> </body> </html> 7° En la clase parcial, será implementada la interface. El nombre de la interface es IfaceIt. Los tipos de script son dos objetos de nombre iA y iB como tipos IfaceIt. Entonces, usaremos el objeto IfaceIt, este crea dos clases de instancia que implementa la interface. Porque ambas clases implementan la interface, usted puede utilizar los tipos de objetos para la instancia de interface de cada una de las diferentes clases como lo muestra el siguiente script. 5.10.2 C# Iface.aspx.cs using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class Iface : System.Web.UI.Page { private string showMe; private IfaceIt iA; private IfaceIt iB; protected void Page_Load(object sender, EventArgs e) { iA = new UseIfaceA(); iB = new UseIfaceB(); Label1.Text = iA.Show(); Label2.Text = iB.Show(); } } 8° A continuación se creará una interface sencilla. La interface tiene un único método que no hace nada mas que regresar una cadena. La cadena realmente puede regresar cualquier cosa, y los detalles de los métodos son dejados a la implementación real de la interface en clases concretas. Todos ellos tienen para hacer regresar una cadena y utilizar el nombre de un método especifico en la interface; el método Show, no tiene contenido, solo regresa el tipo (String). 9° Clic en el menú Archivo, señale Nuevo y clic en Archivo. 10° Clic en el icono de C# Clase. 11° En el cuadro Nombre escribe: Ifacelt.cs 12° Clic en Agregar. Figura 5. 18 13° Escribimos el siguiente código 5.10.3 C# IfaceIt.cs using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; /// <summary> /// Descripción breve de IfaceIt /// </summary> public interface IfaceIt { String Show(); } 14° Para hacer concreta a la clase que implementará la interface, el código es como una herencia, utilizando los dos puntos para indicar la implementación. También tiene que proporcionar el contenido específico para el método. En este ejemplo, el método Show(), regresa una cadena literal indicando la identidad de la implementación. Observe que la cadena literal contiene una etiqueta XHTML que puede ser leída por el form ASP.NET. 5.10.4 C# UseIfaceA.cs using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; /// <summary> /// Descripción breve de UseIfaceA /// </summary> public class UseIfaceA:IfaceIt{ public String Show() { return "Primera implementación<br/>"; } } 15° La segunda implementación de la interface es similar, pero tiene una cadena literal como valor de retorno para el método. 5.10.5 C# UseIfaceB.cs using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; /// <summary> /// Descripción breve de UseIfaceB /// </summary> public class UseIfaceB: IfaceIt { public String Show() { return "Segunda implementación"; } } Es posible que desee asegurarse de que los archivos de la interfaz y las dos clases que implementan la interfaz se encuentran en la carpeta App_Code antes de probar su aplicación. Cuando todo este listo, pulse clic en la ficha de Iface.aspx y luego Ctrl + F5 para probar su aplicación. La siguiente imagen muestra los diferentes resultados generados por la misma interface implementada en dos diferentes clases. La clase parcial que ha personalizado para usarlo con el código ASP.NET es capaz de crear instancias de objetos basados en la interface sin ningún problema. Lo mismo con estructuras largas en C# que usan interface. Figura 5. 19 5.11 Pregunte a los expertos ¿Qué es exactamente lo que se entiende por herencia? Cuando una clase o clase parcial hereda otras clases, la clase heredada obtiene todas las características de la clase que ha heredado. Esto significa que la clase que hereda, también llamado secundario o subclase de la clase heredada, puede utilizar todos los métodos y propiedades de la clase padre. 5.12 Haciendo más con C# y la programación orientada a objetos Este libro es realmente una larga nota acerca del uso de estructuras más sofisticas en C#, pero necesitará mirar un libro completo basado en C# para ingresar en el tipo de detalles que tendrá que emplear OOP. Usted encontrará que C# es increíblemente un poderoso lenguaje. Si ya conoce y se siente frustrado por utilizar las clases parciales en lugar de las autenticas estructuras OOP y clases C#, espero que usted haya visto como utilizar las clases completas en este capitulo y que no tienen por que temer o estar limitados a las clases parciales cuando utiliza C# con ASP.NET 3.5. Todo lo que quiera hacer con C#, lo puede hacer con las clases parciales de C#. Lo que es más, porque las clases parciales son confeccionadas en ASP.NET y puede utilizaer todas las estructuras de ASP.NET. Capitulo 6: Formularios HTML Una de las frustaciones de trabajar con formularios HTML es que ellos no pueden trabajar por si mismos. A menos que algunos otros lenguajes de programación estén trabajando con paginas HTML, el usuario no irá a ningún lado. Por lo tanto, este capitulo revisa formularios HTML para mostrar como los nombre de los datos y formularios pueden ser direccionados en aplicaciones ASP.NET. SI usted está familiarizado con formularios HTML y sus atributos, aun debe tomar una mirada sutil a las diferencias entre usarlo con HTML y con ASP.NET. 6.1 Trabajando con etiquetas de formulario y atributos Todos los formularios en HTML comienzan con la etiqueta <form>. Si usted está trabajando con algunos otros tipos de código o archivos externos, cuando quiera direccionar datos enteros en el formulario, verá algo como lo siguiente: <form id="myForm" action= "someURL" method = "post"> El form id actúa algo así como un nombre de variable para distinguirlo de cualquier otro formulario que podría estar en la página. La acción exige una URL invocando la llamada al programa. Si usted está familiarizado con el original ASP o con PHP, usted debe saber que los datos en los formularios HTML pueden ser direccionados estos otros programas que son denominados. El atributo común del final es un método con uno o dos valores, post o get. El método utilizado depende de si el form es inalterable o no. Para todos los propósitos practicos, un método inalterable es único cuando los valores son inmodificables incluso cuando multiples llamadas son hechas. Los métodos no inalterables son únicos cuando los valores pueden ser cambiados. Cuando los formularios son inalterables, utilice el método get; de lo contrario utilice el método post. Por lo tanto los métodos no inalterables son más utilizados frecuentemente, los desarrolladores tienden a utilizar el método post. La selección de un método puede causar ardientes debates en un entorno HTML, pero en ASP.NET, no verá un valor asignado a un método atributo. En lugar de ello, verá algo como lo siguiente: <form id="myForm" runat="server"> Asi como tuvo que ver en capítulos anteriores, todas las paginas Web en ASP.NET contienen <form runat=”server””> algunos en el archivo ASPX. En su mayor parte, es la principal diferencia (y uuna muy grande) entre formularios HTML en cualquier HTML o XHTML y en ASP.NET. 6.2 Propiedades de etiquetas HTML Las etiquetas HTML tienen varias diferentes propiedades o atributos. La manera sencilla de ver una etiqueta de propiedades o atributos es con Visual Studio 2008. Para comenzar a ver etiquetas HTML en un Web form, debe crear un simple proyecto utilizando algun formulario HTML. Nota: Usted puede encontrar atributos de etiquetas HTMLcomo www.w3.org, el sitio principal de World Wide Web Consortium´s. Para la mayoría de recientes proyectos, vea www.3w.org/html/wg/html5/. 6.3 Utilizar formularios HTML con Sitios Web de ASP.NET Utilice los siguientes pasos para crear un sitio utilizando formularios HTML. 1° Abrir Visual Studio 2008. 2° Pulse clic en Archivo, señale Nuevo y clic en Sitio Web. 3° Si desea agregue la dirección donde se guardará su sitio Web y clic en Aceptar. Nota: Asegúrese que la Ventana propiedades este activa. Si no es así, pulse clic en el menú Ver y clic en Ventana Propiedades. 4° Una vez haya abierto un nuevo sitio Web, seleccione la palabra “form” en la línea <form id=”form1” runat=”server”>. 5° Ahora observe su Ventana de Propiedades y observe sus atributos como lo muestra la siguiente figura. Figura 6. 1 6° En el Cuadro de herramientas, pulse clic en HTML. Figura 6. 2 7° Ahora en el Cuadro de herramientas HTML, arrastre el control Input (Text) debajo del contenedor <div> y antes del contenedor </div> Figura 6. 3 8° Pulse clic al antes de /> de la línea <input id=”Text1” type=”text” />. Ahora escribe: Runat=”server” Ahora pulse la Barra espaciadora para dejar un espacio. Figura 6. 4 9° El form Input (Text) no tienen un atributo Text (o propiedad) como el control TextBox en ASP.NET. En lugar de ello tienen un atributo value que puede ser usado para añadir algunos tipos de contenido al formulario. Añadir el valor “Mi mensaje” a la entrada de texto utilizando el código value=”Mi mensaje” dentro de la etiqueta. La línea debería ser ahora: <input id="Text1" type="text" runat="server" value="Mi mensaje" /> Figura 6. 5 10° Finalmente, añada <br/> al final de la línea para crear una nueva línea donde el próximo elemento HTML irá. Figura 6. 6 11° Seleccione un form Textarea y arrastre al escenario debajo de Input (Text) y a la izquierda. Figura 6. 7 12° Añada runat=”server” al final, y elimine la etiqueta </textarea> y coloque el slash de cierre al final de la etiqueta como muestra la siguiente línea. <textarea id="TextArea1" cols="20" rows="2" runat="server" /> Figura 6. 8 Una vez que tenga hecho los cambios, su código se debería parecer como lo siguiente: 6.3.1 FormWork1.aspx <%@ Page Language="C#" Inherits="_Default" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> CodeFile="Default.aspx.cs" 1.0 Transitional//EN" <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Página sin título</title> </head> <body> <form id="form1" runat="server"> <div> <input id="Text1" type="text" runat="server" value="Mi mensaje" /><br /> <textarea id="TextArea1" cols="20" rows="2" runat="server" /> </div> </form> </body> </html> Una vez que tenga todo guardado en el archivo ASPX, necesitará tratar con elementos HTML desde el lado de C#. Esto es lo que vamos a hacer. 6.3.2 C# y etiquetas HTML El siguiente paso es bastante simple porque todo lo hecho es transferido a la cadena literal en el form Input (Text) del form Textarea. (Por lo tanto en esta sección, verá lo que sucede si usted intenta utilizar un boton HTML para esperar la entrada del usuario). Por ahora, sin embargo, simplemente edite la clase parcial de C# a lo siguiente. 6.3.3 C# FormWork1.aspx.cs using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TextArea1.Value = Text1.Value; } } Como puede ver, el script simplemente transfiere el valor del form de entrada de texto al textarea. Ambos forms usan el valor atributo, y C# es capaz de usar estos elementos form HTML para colocar el contenido de un form dentro de cualquier otro como ve en la siguiente imagen: Figura 6. 9 Obviamente, transfiriendo datos desde una entrada de texto a un textarea no es demasiado útil a menos que el usuario tenga una oportunidad de ingresar datos. Por lo tanto, necesitamos mirar utilizando algo para celebrar la transferencia hasta que este lista para ser usada. 6.4 Botón HTML Ahora que ha visto que C# puede pasar valores entre formularios HTML, vamos a echar un vistazo a los botones HTML. La mala noticia es que los botones HTML no generan automáticamente el código C# para manipular eventos. Con botones Estandar, todo lo que tienen que hacer es cambiar a el modo Diseño y pulsar doble clic en el boton para generar el manipulador de eventos C#. Sin embargo cuando hace doble clic en un botón HTML, se obtiene en su lugar código JavaScript. 6.4.1 Utilizando botones HTML Los siguientes pasos le brindan a usted una vista rápida de lo que sucede cuando utiliza un boton HTML en lugar de un boton Estandar del Cuadro de herramientas. 1° Abrir un nuevo WebSite seleccionando Archivo, luego Nuevo y clic en sitio Web. Dar el nombre “basura” porque usted lo hechara cuando termine. 2° En el modo Código, arrastre un Input (Button) desde el Cuadro de herramientas al contenedor <div> (entre las etiquetas <div> y </div>) Figura 6. 10 3° Cambiar al modo Diseño, y pulse doble clic en el icono Button. (Puede recordar de capítulos anteriores que esta acción genera automáticamente una función C# para manipular el evento del boton). Figura 6. 11 Sin embargo, en lugar de generar código C# para controlarlo, se genera el siguiente código JavaScript: <script language="javascript" type="text/javascript"> // <!CDATA[ function Button1_onclick() { } // ]]> Que puede ser una pieza útil de código JavaScript, pero no es que lo necesite en su clase parcial de C# para crear un controlador de eventos utilizando el método code-behind. Asi mismo, cuando crea aplicaciones utilizando formularios HTML, va a necesitar un diferente enfoque para activar los eventos de C#. 6.4.2 ASP.NET Junk.aspx <%@ Page Language="C#" Inherits="Junk" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Página sin título</title> <script language="javascript" type="text/javascript"> // <!CDATA[ function Button1_onclick() { } // ]]> </script> </head> <body> <form id="form1" runat="server"> CodeFile="Junk.aspx.cs" 1.0 Transitional//EN" <div> <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /> </div> </form> </body> </html> 6.5 Botones Estándar y formularios HTML Como tuvo que ver, puede utilizar formularios HTML, pero cuando intentamos poner un boton HTML en una aplicación, Visual Studio 2008 genera automáticamente código JavaScript. ¿Es posible utilizar los botones estándar de ASP.NET con los botones Estandar? En otras palabras, ¿Puede C# manipular una combinación de controles Estandar y formularios HTML? Afortunadamente, la respuesta es SI. 6.6 Utilizando botones estándar de ASP.NET La próxima aplicación ilustra una combinación de controles estándar de ASP.NET con formularios HTML que son establecidas a runat=”server” asi mismo ellos pueden trabajar con ASP.NET y se entenderan como formularios por el código subyacente C#. Mientras estamos en ello, añadiremos una imagen a fin de que podamos ver si es posible combinar en etiquetas como <img> a la aplicación. Los siguientes pasos muestran como crear la aplicación: 1° Abrir un nuevo sitio Web seleccionando Archivo, señale Nuevo y clic en Sitio Web. Darle el nombre HtmlForm2. 2° Seleccionar el modo Codigo y HTML en el Cuadro de Herramientas. Figura 6. 12 3° Arrastre una instancia del form Input (Text) y el form Textarea dentro del contenedor <div>. Figura 6. 13 4° Seleccione el menú Estandar en el Cuadro de herramientas de Visual Studio 2008, y arrastre una instancia de un Button a la pagina de código y coloque justo debajo de la etiqueta <textarea> Figura 6. 14 5° Coloque una imagen en la carpeta HtmlForm2 como muestra la siguiente imagen. En este caso, utilizo un clip de fotografía en formato JPG. Figura 6. 15 6° Cambiar al modo Diseño, y arrastre la imagen desde la carpeta a la posición que usted quiera en la pagina. Cuando arrastra la imagen, un cuadro de dialogo aparece y pide un texto alternativo y una descripción larga. 7° En el cuadro Texto alternativo, escribe: Antílope. 8° En el cuadro Descripción larga, escribe: Imagen en JPG. 9° Clic en Aceptar. Figura 6. 16 Una vez finalizado, aumente algunas etiquetas para que su código se muestre como lo siguiente. 6.7 Mixed.aspx <%@ Page Language="C#" Inherits="_Default" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Página sin título</title> </head> <body> <form id="form1" runat="server"> <div> CodeFile="Default.aspx.cs" 1.0 Transitional//EN" <input id="Text1" type="text" runat="server" /><br /> <textarea id="TextArea1" cols="20" rows="2" runat="server"></textarea><br /> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> <br /> <img alt="Antílope" longdesc="Formato JPG" src="Antelope.jpg" style="width: 308px; height: 231px" /> </div> </form> </body> </html> Una parte importante de este ejercicio es ver si los diferentes tipos de combinación de formularios HTML y botones Estandar de ASP.NET trabajarán juntos. Tambien, recuerde que los objetos incluyen un archivo JPEG, y el archivo de imagen debe jugar muy bien en la caja de arena con los otros elementos que se crean utilizando runat=”server” en sus contenedores de etiquetas. 6.8 C# Mixed.aspx.cs using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class _Default : System.Web.UI.Page { protected void Button1_Click(object sender, EventArgs e) { TextArea1.Value = Text1.Value; } } Una vez tenga el código completo, ir por delante y probarlo. Como puede ver la próxima imagen, los dos diferentes form de HTML aparecen solos con el boton Estandar dASP.NET y la imagen del antílope. Figura 6. 17 Ingrese un texto en el campo de texto superior de HTML y clic en el boton. Verá que el valor del cuadro de texto superior, pasa al cuadro de texto inferior sin ningún problema. Figura 6. 18 6.9 Utilizando formularios HTML Interactivos Usted puede utilizar formularios HTML para la entrada de datos en una aplicación ASP.NET, pero para utilizar botones HTML, vamos a tener que poner algun código especial en lugar de confiar en nuestro viejo amigo Visual Studio 2008 para hacer todo el trabajo. Lo primero que todo, usted necesitará utilizar un boton Enviar cuando crea su boton para lanzar un evento controlado de C#. En segundo lugar, necesitaremos un formato especial para especificar un evento. Lo siguiente muestra los elementos claves que necesitará para ingresar de la mano después de haber arrastrado el boton Input (Submit) desde el Cuadro de herramientas al escenario: <input id="MyButton" type="submit" value="Button" OnServerClick= "My_Click" runat="server" /> Dos atributos claves deben ser incluidos. En primer lugr, necesita el atributo… OnServerClick="My_Click" El valor no hace necesario que sea “My_Click”, será cualquier nombre. EL valor (“My_Click”) es el nombre de evento que utilizará con la aplicación de la parte de C#. El segundo atributo clave dice el script que este boton es una aplicación del lado del servidor. Esto es requerido para todas las etiquetas HTML que serán usadas con C#... runat="server" En el proceso de depuración, la primera cosa que se verifica es si el runat=”server” ha sido añadido a su etiqueta HTML. En el código C# el enfoque sencillo es para cambiar el código predeterminado del controlador de evento de C# desde… protected void Page_Load(object sender, EventArgs e) { //Operational code } a… protected void My_Click(object sender, EventArgs e) { //Operational code } Como puede ver, el cambio es minimo. Usted solo sustituye su propio nombre de manejador para el predeterminado Page_Load. Todo C# será buscado por el verdadero nombre del evento basado en el atributo OnServerClick0”My_Click” en su etiqueta button y runat=”server”. 6.10 Pregunte a los expertos ¿Puede utilizar cualquier nombre de controlador de evento que quiera? ¿Qué debo hacer si quiero utilizar “Page_Load” como nombre de controlador de evento para un boton? Se que no tiene sentido, pero es curiosidad. Porque Page_Load es un evento de página, no responderá a un evento button_click. De hecho, ASP.NET 3.5 y C# tienen varios eventos de páginas tales como Page_Unload, Page_Init, y Page_LoadComplete que no responderán a un button_click. Sin embargo, si utiliza un controlador de evento como nombre Page_Click con un boton, responde tan bien como cualquier otro nombre asociado con un control Button. Incluso aprendes mas, sin embargo, Yo recomiendo que no utilice el prefacio Page_ a menos que lo único que quiera es tener que responder a una pagina de evento de página. 6.11 Extrayendo valores desde formularios HTML Hasta este punto, hemos estado utilizando el atributo value de diferentes modos de formularios de texto HTML para pasar valores. Sin embargo, en adicion a los formularios de texto en HTML, usted tiene una selecciona de mayor riqueza de donde elegir. Incluyen menús de lista desplegables (Select forms), radio buttons y checkboxes. Cada uno de esos han sido colocados en el UI (User Interface) por varios diferentes tipos de sitios. Cada uno de estos formularios HTML se analizan junto con como los datos pueden ser retirados desde diferentes formularios. Entonces, usando varios diferentes formularios HTML, veremos como hacer una política de aplicación que utiliza una muestra de formularios de entrada de datos en HTML. 6.12 HTML Select Form Los HTML Select forms son llamados a menudo menús pop-up o listas desplegables. Ellos son utilizados cuando el usuario tiene que seleccionar desde una larga liusta de opciones, y no posee mucho espacio en la página para mostrarlos. SI usted alguna vez ha seleccionado una lista de países que comienza con Afganistan y termina en Zimbabwe, usted tienen una buena idea de cuanto espacio tiene una lista de este tipo. Sin embargo, por medio de un Select form, puede almacenar todos los países del mundo y tomar solo una línea de ellos. 6.12.1 Configuracion ASP.NET con HTML Select Configurar un Select form es un poco diferente que alguno de los otros forms de HTML porque usted añade varias líneas. Inicialmente cuando usted arrastra un Select form desde el Cuadro de herramientas de HTML, usted verá el contenedor <select> y dentro un contenedor simple <option>. Usted puede agregar cualquier cantidad de elementos como quiera. Tipicamente la opcion de arriba es el nombre del menú, y entonces cada opcion seleccionable es una categoría o caso dentro del conjunto. Por ejemplo, lo siguiente muestra como un Select form es configurado en ASP.NET. <select id="Select1" runat="server"> <option>Country</option> <option>Afghanistan</option> <option>Albania</option> <option>Algeria</option> </select> Un atributo importante a incluir en el HTML Select es el objeto runat=”server”. Si usted olvida agregar este atributo, este no será reconocido por el script de C#. Tambien, usted tiene que decidir si la lista Select va a permitir multiples elecciones a la vez o se excluyen mutuamente. Si quiere que el usuario seleccione multiples opciones, entonces debe agregar el atributo y valor… multiple="multiple" Dentro de la etiqueta <select>. Por supuesto, usted puede querer agregar algunas de las otras propiedades también, y más adelante en el libro usted verá algunas propiedades utiles cuando trabaja con tipos específicos de datos. 6.12.2 Lectura de C# y escribiendo HTML Select form La forma sencilla de pensar en un HTML Select form, es como un array. El nombre del array es el valor asignado al atributo id. En el ejemplo, el nombre predeterminado Select1 es el valor id. Cada opcion en el formulario puede ser tratado como un elemento array. Usted puede referenciar las opciones como Items en un array. Por ejemplo, si tomamos el segundo ítem en el Select form, en un array basado en cero, podríamos tener Afganistan como la variable de cadena en la siguiente línea: String someCountry = Select1.Items[1]; //Algunos países podrían tener el valor Afganistan Por supuesto, cuando está programando en C#, los únicos valores que quiera son seleccionado por el usuario. Una de las propiedades, Selected, es un Booleano. Asi mismo, si el usuario selecciona el cuarto elemento, por ejemplo, el valor de ese ítem sería true. En el listado anterior, el valor del cuarto ítem podría ser Algeria. Lo bueno de pensar acerca de arrays es que usted puede usar un bucle para iterar a través de ellos. De este modo si usted tiene una larga lista, esto es fácil para verificarlos a cada uno con un minimo código. En el caso del Select form, buscaría para observar si la opciones está seleccionada. Si está seleccionada, entonces su código puede pasarlo a donde quiera que vaya. Lo siguiente muestra un típico bucle para inspeccionar el contenido de un HTML Select form y entonces enviarlo a un form textarea. for (int state = 0; state <= Select1.Items.Count -1;state++) { if (Select1.Items[state].Selected) { TextArea1.Value += Select1.Items[state].Text + "\n" ; } } Note que la propiedad Count del objeto Select.Items es utilizado para determinar la longitud del array (número de opciones) Tambien note que 1 se resta del número de opciones porque al igual que todos los arrays, este se basa en cero. La siguiente imagen muestra un típico menú de lista desplegable usando un HTML Select form. Figura 6. 19 Como una interfaz de usuario, el Select form es practico para el ahorro de espacio; sin embargo, Select form necesita ser usado prudentemente. A menudo los usuarios pasan por alto un menúr de lista desplegable como la categoría correcta para una seleccion. Si lo hacen, ellos pueden perder algo que tratamos de encontrar. (Que definitivamente no es algo que quiera que esto suceda en una aplicación e-business) Es bastante seguro su uso con categorías conocidas como estados y países. 6.13 Cuadros de verificación HTML Los cuadros de verificación son fantásticos para situaciones donde usted quiera que el usuario haga una o varias selecciones. No solo es fácil para el usuario hacer la selección, sino también el check box (cuadro de verificación) es un camino para dejar que el usuario conozca cuales son sus opciones. Como verá, son fáciles para usar en una colección de datos y otros practicos IU. 6.13.1 COnfiguracion de ASP.NET con HTML Checkbox Cada check box que usted coloca en su aplicación necesita un separador de atributo id, value y runat=”server”. A diferencia del HTML Select form, el HTML check box no almacena valores en un contenedor <option>, sino mas bien es asignado a un atributo value. Lo siguiente muestra una tipicaconfiguracionde check box en un archivo ASPX: <input id="Checkbox1" type="checkbox" runat="server" value="Economy"/> Para que el usuario pueda conocer la referencia al check box, depues de la etiqueta de cierre de caracteres, necesita que escriba un valor. Por ejemplo, lo siguiente muestra lo que suele seguir la etiqueta de cierre de caracteres. runat="server" value="Economy/>Economy<br/> SI el check box es puesto verticalmente, como es típicamente el caso, cada check box será seguido por algun tipo de etiqueta de salto de línea. 6.13.2 Lectura de C# y escribiendo HTML Checkboxes El check box tiene dos estados: Activo, o no activo. Al igual que la propiedad Selected del HTML Slect form , el Checked es Booleano. Trabajar con el estado de cada check box usando declaraciones condicionales estándar, ambos pueden consumir tiempo y desordenaro su código. Utilizando un operador terniario C# simplifica en gran medida y condensa el proceso de engañar el estado actual del check box. La siguiente línea muestra un ejemplo sencillo: SendValue=Checkbox1.Checked == true ? Checkbox1.Value: null; La línea simplemente se pregunta si el check box es verdadero o no, si es asi, que asigne el valor al check box para la variable SerdValue. Si no es verdadero, SendValue es asignado un valor nulo. Usando el operador ternario, el proceso completo solo toma una simple línea en lugar de varias líneas usando una secuencia if…else. La siguiente imagen muestra un uso típico para check boxes. El usuario dispone con varias diferentes opciones y puede elegir como muchos o pocos como desee. Figura 6. 20 Como puede ver, las opciones son claras y visibles. Todos los usuarios tienen que hacer clic al check box para seleccionar la opcion o clic nuevamente para dejar de seleccionarlo. 6.14 HTML Radio Button El radio button en HTML son virtualmente idénticos al check box con una importante excepción. Los Radio buttons son para seleccione mutuamente exclusivas ( si usted selecciona alguno, no puede seleccionar otro) y los check boxes son para multiples selecciones. Por ejemplo, si pide a una persona que indique su sexo, será varón o mujer, pero no ambos. A veces los diseñadores questionan pues quieren forzar a una única respuesta, tales como que el usuario considera una única elección más importante en lugar de todas aquellas elecciones que también considera importantes. 6.14.1 Configurar ASP.NET con HTML Radio Buttons AL igual que con los check boxes, necesita incluir con el radio button un único atributo id, value y runat=”server”. Sin embargo, el HTML radio form también tiene un atributo name. El atributo name con el radio button es realmente un group name en que varios diferentes radio buttons con un único valor id pueden todos tener el mismo nombre. De lo contrario, el formato es el mismo como con el HTML checkbox. El siguiente ejemplo muestra dos típicos radio buttons con el mismo nombre pero con diferentes ids y valoes: <input id="Radio1" type="radio" name="party" value="Democratic" runat="server" /> <input id="Radio2" type="radio" name="party" value="Republican" runat="server" /> Como puede ver, ambos tienen el valor party en name. Cuando el usuario pulsa clic en un radio button, todos los otros con el mismo nombre son deseleccionados. Ellos pueden tener diferentes valors id como usted quiera, pero un solo radio button en un group name puede ser seleccionado en cualquier momento. 6.14.2 Lectura en C# y escribiendo con HTML Radio Buttons Cuando C# lee un radio button, este lo lee solo como check boxes. La propiedad Checked es un booleano adjuntando al radio button el valor id. Como resultado, puede usar el mismo operador ternario de C# como con check boxes en HTML, Mire un ejemplo: SendValue = Radio1.Checked == true ? Radio1.Value: null; Verifique que el atributo name no es usado. Como resultado, cuando verifica si el radio button es Activado, necesitará verificar cada id por separado. La siguiente imagen muestra un típico ejemplo de radio button. Cuando crea una consulta usando radio buttons, asegurese en proporcionar todas las categorías posibles. La otra categoría podría ser útil para seleccionar usuarios que son Libertarian, Green o algunas partes no listadas. Figura 6. 21 SI el usuario selecciona cualquiera de las categorías de los otros radio buttons, la única selección actual podría ser desactivada. ( El circulo de relleno en un radio button no se parece a un check (visto bueno), pero es asi el nombre de la propiedad) 6.15 Una Encuesta política usando forms HTML Para ver una practica de cómo uestd podría incorporar forms HTML, este próximo ejemplo utiliza varios diferentes forms. Una vez los usuarios completen el form, la salida es presentada en un textarea de HTML. Para la entrada de datos y cálculos, la aplicación no es muy diferente de uno que podría desarrollar para introducir datos en una base de datos. 1° Abrir Visual Studio 2008. 2° Clic en el menú Archivo, señale Nuevo y clic en Sitio Web. 3° Escriba como nombre EncuestaPolitica y luego clic en Aceptar. Figura 6. 22 4° Pulse clic en el Explorador de soluciones. Figura 6. 23 5° Pulse clic derecho en Default.aspx y escriba: Poll. Nota: Puedes agregar el nombre Poll o Política. 6° Escriba el siguiente código: 6.15.1 ASP.NET Poll.aspx <%@ Page Language="C#" Inherits="Poll" %> AutoEventWireup="true" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> CodeFile="Poll.aspx.cs" 1.0 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Encuesta Política</title> </head> <body> <center><h1>Encuesta de votación para New England</h1></center> <form id="form1" runat="server"> <div> Estado<br /> <!-- Select Menu --> <select id="Select1" runat="server"> <option>Seleccionar Estado</option> <option>Connecticut</option> <option>Maine</option> <option>Massachusetts</option> <option>New Hampshire</option> <option>Rhode Island</option> Transitional//EN" <option>Vermont</option> </select> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <!-- Input Text --> <input id="Town" type="text" value="Nombre de ciudad" runat="server"/> <br /> Afiliación al partido <br /> <!-- Radio Buttons --> <input id="Radio1" type="radio" name="party" value="Democrático" runat="server" />Democrático<br /> <input id="Radio2" type="radio" />Republicano<br /> name="party" value="Republicano" runat="server" <input id="Radio3" type="radio" name="party" value="Independente" runat="server" />Independiente<br /> <input id="Radio4" type="radio" name="party" value="Otros" runat="server" />Otros<p /> Cuestiones importantes (Marque todas las respuestas pertinentes)<br /> <!-- Checkboxes --> <input id="Checkbox1" type="checkbox" runat="server" value="Economía" />Economía<br /> <input id="Checkbox2" type="checkbox" runat="server" value="Entorno" />Entorno<br /> <input id="Checkbox3" type="checkbox" runat="server" Internacionales" />Relaciones Internacionales<br /> <input id="Checkbox4" type="checkbox" />Reforma electoral <br /> <input id="Checkbox5" />Tecnología<p /> runat="server" type="checkbox" value="Relaciones value="Reforma Electoral" runat="server" value="Tecnología" <!-- Buttons --> <input id="Reset1" type="submit" OnServerClick="Reset_Click" /> value="Clear" runat="server" <input id="Submit1" type="submit" OnServerClick="Submit_Click" /> value="Send Data" <p /> <!-- Textarea --> <textarea id="TextArea1" cols="40" rows="10" runat="server"></textarea> </div> </form> </body> </html> 6.15.2 C# Poll.aspx.cs using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class Poll : System.Web.UI.Page { runat="server" protected void Reset_Click(object sender, EventArgs e) { Radio1.Checked = false; Radio2.Checked = false; Radio3.Checked = false; Radio4.Checked = false; TextArea1.Value = ""; Town.Value = "Nombre de la ciudad"; for (int state = 0; state <= Select1.Items.Count - 1; state++) { Select1.Items[state].Selected = false; } Checkbox1.Checked = false; Checkbox2.Checked = false; Checkbox3.Checked = false; Checkbox4.Checked = false; Checkbox5.Checked = false; } protected void Submit_Click(object sender, EventArgs e) { //Handle Input (Text) TextArea1.Value = "Usted vota en " + Town.Value + ", "; //Handle Select for (int state = 0; state <= Select1.Items.Count - 1; state++) { if (Select1.Items[state].Selected) { TextArea1.Value += Select1.Items[state].Text + "\n"; } } //Handle Radio Buttons TextArea1.Value += Radio1.Checked == true ? " Su afiliación es:" + Radio1.Value + "\n" : null; TextArea1.Value += Radio2.Checked == true ? " Su afiliación es:" + Radio2.Value + "\n" : null; TextArea1.Value += Radio3.Checked == true ? " Su afiliación es:" + Radio3.Value + "\n" : null; TextArea1.Value += Radio4.Checked == true ? " Su afiliación es:" + Radio4.Value + "\n" : null; //Handle Checkboxes TextArea1.Value += "Estas cuestiones son importantes para:\n"; TextArea1.Value += Checkbox1.Checked == true ? " " + Checkbox1.Value + "\n" : null; TextArea1.Value += Checkbox2.Checked == true ? " " + Checkbox2.Value + "\n" : null; TextArea1.Value += Checkbox3.Checked == true ? " " + Checkbox3.Value + "\n" : null; TextArea1.Value += Checkbox4.Checked == true ? " " + Checkbox4.Value + "\n" : null; TextArea1.Value += Checkbox5.Checked == true ? " " + Checkbox5.Value + "\n" : null; } } 7° Guarde su proyecto. 8° Pulse Ctrl + F5 para ejecutar su aplicación y debe aparecer una pantalla como muestra la próxima imagen. Observe como los datos seleccionados por el usuario, se reflejan en el textarea de HTML. Figura 6. 24 9° Vamos a probar el formulario que es una simulación de encuesta en los estados de New England en Estados Unidos. En Estado, seleccione Coneccticut. 10° En Nombre de ciudad escribe: Bloomfield. 11° Seleccione Democrático y luego active todas las casillas de verificación. 12° Clic en el botón Send Data (Enviar datos). Observe el resultado: Figura 6. 25 Una de las características que usted pueda tener que preguntarse es el empleo de un boton de tipo “submit” para hacer que un boton reset HTML normalmente haría, limpiar todo el formulario. Esto no se ejecuta en el servidor, que podría ser cierto. Sin embargo, el tipo reset no es reconocido por C# u operaciones del lado del servidor. Asi mismo, necesita cambiar el tipo “enviar”, y usted tiene que escribir el código del reset en C# para limpiar todo el formulario. En esta aplicación en particular usted puede ver como cinco de los diferentes controles HTML son limpiados. Para completar este capitulo, usted puede haver notado que otros forms HTML que están disponibles no han sido tratados; ya sea porque su uso es una característica común con los forms descritos en este capitulo. Si usted está familiarizado con forms HTML, puede ver como es fácil adaptarse a usarlo con ASP.NET y C#. En otras palabras, ASP.NET no es tan dificil como algunos imaginan. Capitulo 7: Controles Web Estandar EN el capitulo anterior usted vió como utilizar una amplia gama de forms HTML para capturar y almacenar datos temporalmente y pasar los valores a través de C# a diferentes formularios. Usted probablemente encontrará ese capitulo utilizando forms ASP.nET para hacerlo más sencillo o al menos tan simple porque utilizará controles Web que fueron construidas específicamente para usarlos en ASP.NET en conjunción con C#. (“Controles Web form” es el termino oficial de Microsoft, pero “Web controls” es un termino menos incomodo) Por ejemplo, en lugar de tener el código a mano del controlador de eventos para un control web estándar Button, puede usar Visual Studio 2008 a fin de que todo lo que necesite hacer es un doble clic en el Button en la vista Diseño para generar un controlador de evento en la clase parcial de C#. En el trabajo con los controles Web, encontrará que las propiedades son muy enriquecidas que los atributos disponibles en los forms de HTML. Como resultado, usted puede hacer más con un control Web que con un form HTML. Sin embargo, usted debería encontrar el procedimiento para enviar datos desde un lugar a otro de manera similar, asi que lo que usted aprendió en el uso de los forms de HTML puede ser aplicado a controles Web de ASP.NET. 7.1 Entrada de Datos Esta sección examina los principales controles Web estándar cuya principal misión es recibir la entrada de usuarios. Estos controles son escen cialmente controles UI, y en la mayoría de los aspectos ellos no son diferentes de los forms HTML discutidos en el capitulo anterior. Se incluyen los siguientes controles Web. TextBox CheckBOx RadioButton DropDownList ListBox RadioButtonList CheckBoxList Todos estos controles tienen un anfitrión de propiedades; por ejemplo, vamos a tomar vitazo cercano a como utilizar las propiedades asociadas con el TextBox. Cuando piensa en TextBox, usted puede ver como aplicar propiedades a diferentes controles entrada de datos. Es más, veremos como el mismo control puede ser usado en mas una sola manera, simplemente cambiando las propiedades. un se de de 7.2 Control TextBox para la Entrada de datos Para empezar, tomaremos un vistazo a las diferentes propiedades del control TextBox organizados por categorías. Estas categorías pueden rápidamente decirle que tipo de funcionalidad puede añadir a su control. 1° Abrir Visual Studio 2008. 2° Clic en el menú Archivo, señale Nuevo y clic en Sitio Web. 3° Escribe como nombre del proyecto EntradaDatos. Figura 7. 1 4° Establezca el editor en el modo Código. 5° Active el Cuadro de herramienta de ASP.NET. 6° Arrastre el control TextBox al editor y coloque dentro del contenedor <div>. Figura 7. 2 7° Seleccione la parte TextBox del código y abra la ventana Propiedades. 8° En la ventana Propiedades, clic en el icono Por categorías si es que aún no esté activo. Figura 7. 3 Ahora está todo establecido para trabajar con el control TextBox y sus propiedades. Organizando las tareas del control en categorías, le permite trabajar con más eficiencia. Usted podrá ver las siguientes categorías. Accesibilidad Apariencia Comportamiento Datos Diseño Varios Dependiendo de la categoría que necesite, puede tener la ventana Propiedades enfocada para alternar entre el signo más (+) y menos (-) al lado de cada nombre de categoría, de modo que solo los que vas a utilizar se expanden (tiene mostrado el signo menos (-). Las categorías Apariencia y el Comportamiento tienen la mayoría de opciones de propiedades, de modo que serán usados para ilustrar como trabaja con las propiedades de ASP.NET. 7.2.1 Apariencia Cierre todas las categorías en la ventana Propiedades del TextBox exepto Apariencia. (“Apariencia” tendrá un signo menos (-) al lado, y los otros tendrán un signo más) Usted verá varias diferentes opciones disponibles en la ventana Propiedades como lo muestra la siguiente figura: Figura 7. 4 Mientras la palabra clave TextBox en la línea 12 es seleccionada, será capaz de ver las propiedades del TextBox en la ventana Propiedades. Usted puede, ver y cambiar las propiedades que se muestran en el código desde ese lugar. Para comenzar a hacer cambios, seleccione la propiedad BackColor en la ventana Propiedades y escribe: #FFFF80 Figura 7. 5 Pulse la tecla Tab y verá como se aumenta código al lado de la línea 12 del código del control TextBox. Figura 7. 6 El valor Hexadecimal dan con exactitud el color que quiera de una elección de más de un millón de combinaciones. Sin embargo, siempre que abra una propiedad de color, un pequeño icono aparece a la derecha de la propiedad como muestra la siguiente figura: Figura 7. 7 Ademas de cambiar el valor de la propiedade BackCOlor, cambie lo siguiente asi: Propiedad BorderCOlor BorderWidth Font-Names ForeCOlor Valor #CC0000 1 Arial Black #4C1900 Figura 7. 8 Una vez finalizado, pruebe su proyecto. Deberia ver su control TextBox como dibujado.Cuando ingrese texto, verá la fuente en negrita Arial Black en lugar de su valor predeterminado. Figura 7. 9 Usando Visual Studio 2008 puede también ver el cambio de apariencia en la vista Diseño. Sin embargo, cuando selecciona un control Web, verá que en lugar de ver el color seleccionado en la ventana Propiedades, verá el cambio de color se produce cuando un objeto es seleccionado. Basta con un solo clic fuera del control Web y verás los colores reales. La mejor forma para acostumbrarse a la apariencia del control TextBox es experimentando con este. Es bastante simple su uso, pero incluso con simples herramientas, probando elementos no deseados ahora, evita sorpresas más adelante. Nota: La creación de esquemas de colo, los diseñadores suelen utilizar CSS y que método es favorable para constancia del diseño del sitio. La propiedad CssClass requiere un CSS. Sin embargo, por más pequeña que sea la aplicación, puede hacer cambios a un control y usar los mismos valores de propiedad para otros controles sin CSS.