FORMULARIOS WEB 1.- Qué es un Formulario Web? Un formulario Web consiste en la combinación de HTML, código y controles que se ejecutan sobre un Servidor Web que tiene corriendo a Microsoft Internet Information Services (IIS). Los Formularios Web muestran una Interfaz de usuario mediante la generación de HTML que será enviado al navegador, mientras el código y los controles que generaron esa interfaz de usuario se encuentran en el servidor Web. Esta separación entre interfaz de usuario del lado del cliente y código del lado del servidor es la diferencia mas significativa de Formularios Web y las páginas Web tradicionales. Una página Web tradicional requiere que todo el código sea enviado y sea procesado por el navegador, los Formularios Web solo requieren que se envie al navegador controles de interfaz de usuario, manteniendo el proceso de la página sobre el servidor. Esta separación de Interfaz de Usuario y código incrementa el número de navegadores que soportan el código, mientras se incrementa la seguridad y la funcionalidad de las páginas Web. La extensión .aspx Los Formularios Web son comúnmente referenciados como páginas ASP.NET o páginas ASPX. Los Formularios Web tienen la extensión .aspx y trabajan como contenedores del texto y los controles que se quiere mostrar en el navegador. Las páginas ASP.NET (.aspx) y las Active Server Pages (ASP) (.asp) pueden coexistir sobre el mismo servidor. La extensión determina cuando se procesa una página ASP o una ASP.NET Los Formularios Web generalmente se componen de dos archivos: los archivos .aspx que contienen la interfaz de usuario y el llamado code-behind .aspx.cs que contiene el código de soporte. Atributos de Página La funcionalidad de un Formulario Web está definida por tres niveles de atributos. Los atributos de página que definen funciones globales, los atributos de cuerpo (body) que definen como la página va ha ser mostrada, y los atributos de formulario que definen como serán mostrados el grupo de controles que serán procesados. El tag <@ Page> define los atributos específicos de página que son usados por el parser de ASP.NET y por el compilador. Solo se puede incluir un tag <@ Page> por archivo .aspx. El siguiente es un típico tag <@ Page>: <%@ Page Language="vb" Codebehind="WebForm1.aspx.vb" SmartNavigation="true" %> Los atributos de un tag <@ Page> son: Language: El atributo Language define el lenguaje en el cual es escrito la página Web. Algunos valores de este atributo son: vb, csharp, y JScript. Codebehind El atributo Codebehind identifica la página code-behind que tiene la lógica que soporta el Formulario Web. Cuando Visual Studio .NET crea un Formulario Web, como WebForm1.aspx, este tambien crea una página de code-behind WebForm1.aspx.vb. SmartNavigation El atributo SmartNavigation en ASP.NET permite al navegador refrescar solo la sección del Formulario Web que cambio. La ventaja de Smart Navigation es que la pantalla no parpadea cuando se actualiza; en lugar de eso, la posición de las barras de scroll es mantenida asi como solo la última página histórica. Smart Navigation solo es disponible para los usuarios de Microsoft Internet Explorer 5 o superior. Atributos Body (2005) El tag <body> define la apariencia de los objetos que se muestran en el browser del cliente. El siguiente es un típico tag <body> <body ms_positioning="GridLayout"> Los atributos de el tag <body> incluyen: PageLayout: El atributo pageLayout (etiquetado como ms_positioning) determina como son posesionados los controles y el texto sobre la página. Hay dos opciones para el pageLayout: FlowLayout: En FlowLayout el texto, las imágenes y los controles se distribuyen en la pantalla dependiendo del ancho de la ventana del navegador. GridLayout: En GridLayout, el texto, las imágenes y los controles sobre la página, son fijados por coordenadas absolutas. El GridLayout es el pageLayout por defecto en Visual Studio .NET. El siguiente código muestra un ejemplo de como se implementa el GridLayout para localizar un text box: 1 <body ms_positioning="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:textbox id="txtField1" style="Z-INDEX: 101; LEFT: 65px; POSITION: absolute; TOP: 98px" runat="server" Height="26px" Width="194px"> </asp:textbox> </form> </body> Atributos de Formulario El tag <form> define como serán procesados grupos de controles. El tag <form> es diferente que el Formulario Web actual que es usado para definir la página Web entera. El atributo <form> define como los controles serán procesados. Se puede tener varios formularios HTML sobre la página, pero solo se puede tener un formualrio server-side en una página .aspx. El siguiente es un típico tag <form>: <form id="Form1" method="post" runat="server"> ... </form> Los atributos del tag <form> incluyen: Method El atributo Method identifica el método para enviar valores de los controles de vuelta al servidor. Las opciones para este atributo son: Post: Los datos son pasados en pares nombre/valor dentro el cuerpo de la petición HTTP (Hypertext Transfer Protocol). Get: Los datos son pasados en una cadena de consulta (query string). Runat Una característica clave de un formulario es que el control de ejecución se realiza en el servidor. El atributo runat="server" causa el envío de la información de ejecución de la página ASP.NET vuelta al servidor donde el código de soporte se ejecuta. Si el atributo runat no es puesto a "server", el formulario trabaja como un formulario HTML común. Ejemplo Lo siguiente es el código por defecto para un Formulario Web en Visual Studio .NET que es creado para un nuevo proyecto de tipo ASP.NET Web Application: <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5> </head> <body MS_POSITIONING="GridLayout"> <form id="Form1""> method="post" runat="server"> 'HTML and controls go here </form> </body> </html> 2.- Creando un formulario Web con Visual Studio .NET Dependiendo de su ciclo de desarrollo, hay varias formas de crear un Formulario Web. Nueva aplicación Web Cuando usted crea un nuevo proyecto en Visual Studio .NET, automáticamente un Formulario Web es creado por defecto, con el nombre WebForm1.aspx. Para crear una nueva aplicación ASP.NET Web y un Fomulario Web: 1. En Visual Studio .Net, en el Start page, haga click sobre New Project. 2. En el cuadro de diálogo New Project, haga click sobre ASP.NET Web Application, introduzca el nombre en el campo Location, y luego presione OK. Visual Studio .NET creará una nueva Aplicación Web y con ella un Formulario Web. El formulario Web tendrá el nombre de WebForm1.aspx. Creación de Formularios Web adicionales Si usted quiere expandir un proyecto ya creado, puede hacerlo utilizando el Solution Explorer para añadir fácilmente Formularios Web a su proyecto. Para añadir Formularios Web adicionales a una aplicación Web 1. En el Solution Explorer, haga click derecho sobre el nombre del proyecto, apunte a Add, y luego haga click en Add Web Form. Un cuadro de diálogo titulado Add New Item – Nombre Proyecto aparecerá. 2. En el cuadro Add New Item – Nombre Proyecto, cambie el nombre del Formulario Web y luego haga click en Open. Un nuevo formulario será añadido al proyecto de aplicación Web. Actualizar páginas HTML Si quisiera actualizar un Web site existente, usted puede importar las páginas HTML a Visual Studio .NET y luego actualizarlas a Formularios Web. 3.- Qué es un Server Control? Estos controles son diferentes a los controles HTML porque su lógica se ejecuta en el servidor y no en el navegador del usuario. Los server control ASP.NET son componentes que se ejecutan sobre el servidor y encapsulan Interfaz de Usuario UI y otra funcionalidad relacionada. Los server controls son usados en las páginias ASP.NET y en las páginas de code-behind ASP.NET. Los server controls incluyen botones, text boxes, cuadros de lista desplegables. Tipos de Server Controls Hay numerosos tipos de sever controles que estan disponibles en ASP.NET. Algunos server controls se parecen mucho a los controles tradicionales HTML, mientras otros server controls son nuevos en ASP.NET. Este amplio rango de controles le permite personalizar sus Formularios Web para que hagan juego con sus aplicaciones que tiene creadas. HTML server controls Por defecto, los elementos HTML no estan disponibles en un Formulario Web; los elementos HTML son tratados como un texto opaco que es pasado a través del navegador. Sin embargo añadiendo, el atributo runat="server" se convierten los elementos HTML a HTML server controls, que exponen los elementos que permiten la programación del lado del servidor. Web server controls Los web server controls no solo incluyen un tipo de control como los botones y los text box, tambien incluyen controles para específicos propósitos como es un calendar. Los web server controls mas abstracto que los HTML server controls en los cuales su modelo de objeto no necesariamente refleja la sintaxis HTML. Los web server controls son clasificados de la siguiente forma: Controles de Validación Los controles de validación incorporan lógica que permite al usuario testear sus entradas. Para testear las entradas del usuario usted coloca un control de validación para el control de entrada y se especifica las condiciones para una correcta entrada de usuario. Controles Enriquecidos Los controles enriquecidos son controles complejos que inlcuyen múltiples funciones. Un ejemplo de estos controles es el control AdRotator, que es usado para mostrar una secuencia de publicidad, el control Calendar, que provee un calendario de fechas. Controles List-bound Los controles List-bound pueden mostrar una lista de datos sobre las páginas Web ASP.NET Web. Estos controles permiten que usted muestre, reformatee, ordene, y edite datos. Controles Web Internet Explorer Los controles Web Internet Explorer son un conjunto de controles complejos, como es el MultiPage, TabStrip, Toolbar y el control TreeView, que pueden ser descargados de Internet e integrados en el entorno de Visual Studio .NET para que pueden ser utilizados en cualquier página ASP.NET de una aplicación Web. Los controles Web Internet Explorer pueden ser dibujados en todos los navegadores comunmente usados sin embargo solo toman su poder ventajoso en Internet Explorer 5.5 o versiones superiores. Usted puede descargarlos en: http://msdn.microsoft.com/library/default.asp?url=/workshop /webcontrols/ overview/overview.asp 4.- GRABANDO ESTADO Uno de los problemas para cuando se configura un Web site es como hacer para salvar el estado de los controles (configuraciones y entradas de usuario) sobre la página Web en los viajes del HTML entre el servidor y el cliente. Esto es asi para cualquier tecnología basada en http, Los 3 formularios son libres de estado, lo cual significa que el servidor no retiene ninguna información entre las peticiones del cliente. Los Formularios Web ASP.NET manejan este problema mediante el almacenamiento del estado de los controles Web server añadiendo un control oculto ViewState llamado _VIEWSTATE, que graba el estado de los controles. Específicamente el control ViewState es añadido para los formularios server-side (del lado del servidor) cuando se coloca el siguiente tag <form … runat="server">, esto solo graba el estado de los controles que estan dentro de los tags <form …> </form>. Como la página viaja del servidor al cliente y del cliente al servidor, el estado del control Web server es mantenido con la página y puede ser actualizado en cualquier fin de transacción (en el cliente o en el servidor). Porque el estado de la página es mantenido junto con el formulario, la página puede ser encaminada aleatoriamente en una granja de servidores web y no necesita retornar al mismo servidor. La ventaja del control ViewState es que el programador puede enfocarse en el diseño de la páginai y no necesita construir la infraestructura para mantener un rastreo del estado de la página. Control oculto El control ViewState es un control oculto que contiene una cadena de pares de valores que listan el nombre de cada control y el último valor de este. Con cada petición el control ViewState es actualizado y enviado al servidor. La respuesta del servidor podría actualizar el control ViewState, cuya actualización sera retornada con la respuesta del servidor. El resultado es que la configuración de la página permanece consistente con los últimos cambios. Lo siguiente es el HTML que es generado por el Formulario Web y es enviado al cliente: <form name="Form1" method="post" action="WebForm1.aspx" id="Form1" runat="server" > <input type="hidden" name="__VIEWSTATE" value="dDw3NzE0MTExODQ7Oz4=" /> 'HTML here </form> Deshabilitación y habilitación del ViewState Por defecto un formulario Web almacena el estado de los controles sin embargo para un formulario con múltiples controles, el tamaño de los valores del control ViewState puede decrementar la performance. Para maximizar la performance de la página usted puede deshabilitar el ViewState a nivel página y habilitar el ViewState solo para algunos controles. Para deshabilitar el almacenamiento de estado a nivel página , ponga el atributo EnableViewState de la directiva @ Page, como se muestra en el siguiente código: <%@ Page EnableViewState="False" %> Para habilitar el almacenamiento de estado para un específico control, se pone el atributo EnableViewState del control como se muestra en el siguiente código: <asp:List id="ListName" EnableViewState="true" runat=" Controles Server HTML Los controles HTML en un Formulario Web no estan disponibles para el servidor. Convirtiendo los controles HTML a HTML server controls, usted puede exponer estos elementos a código del lado del servidor. Esta conversión le da la utilidad a los controles para lanzar eventos que seran manejados en el servidor. Los HTML server controls incluyen el atributo runat="server", y deben estar dentro del tag <form …runat="server">…</form>. La ventaja de los HTML server controls es que permiten fácilmente actualizar las páginas existentes a Formularios Web. Adicionalmente, usted puede optimizar la performance de una página seleccionando los controles que trabajaran localmente en el browser y los controles que seran procesados en el servidor. Controles Web Server Los Web server controls fueron creados específicamente para ASP.NET. A diferencia de los HTML server controls, Los Web server controls no funcionan si no esta el atributo runat="server". Como los Web server controls estan basados en un modelo de objetos común, todos los Web server controls comparten varios atributos, incluyendo el tags <asp:ControlType ...> y un atributo ID. Los Web server controls existen dentro del namespace System.Web.UI.WebControls y pueden ser usados por cualquier Formulario Web. Controles Web server intrínsecos Estos controles corresponden a elementos HTML. Algunos de los comunmente usados controles Web server son mostrados en la siguiente tabla. Validation controls Los controles de validación son controles ocultos que validan la entrada de usuario mediante un predefinido comportamiento. Algunos de los comunmente usados controles de validación son mostrados en la siguiente tabla. Control Función CompareValidator Requiere que las entradas hagan juego con una segunda entrada o con un campo de entrada existente. 5 CustomValidator Requiere que las entradas hagan juego con una condición especial como números primos o numeros pares. RangeValidator Requiere que las entradas esten en un rango determinado. RegularExpressionValidator Requiere que las entradas tengan un formato especifico como es el formato telefonico o un password con numeros y letras. RequiredFieldValidator Requiere que los usuarios introduzcan algun valor antes de pasar el control sea procesado. ValidationSummary Recolecta todos los mensajes de error de los controles de validación para mostrarlos en un lugar centralizado. Controles enriquecidos Los controles enriquecidos proveen una rica funcionalidad para sus Formularios Web insertando complejas funciones. Los controles enriquecidos actualmente disponibles son los que se muestran en la siguiente tabla. Control Función AdRotator Muestra una secuencia (predefinida o aleatoria) de imágenes. Calendar Muestra un calendario gráfico sobre el cual los usuarios pueden seleccionar fechas. Controles List-bound Los controles List-bound pueden mostrar datos de un origen de datos. Algunos de los comunmente usuados son los que se muestran en la siguiente tabla. Control Función CheckBoxList Muestra datos en una columna de check boxes. Repeater Muestra información de un conjutno de datos usando un conjunto de elementos HTML y controles especificados por usted. El control Repeater repite los elementos por cada uno de los registros en el conjunto de datos. DataList Similar al control Repeater, pero con mas opciones de formato y diseño, incluyendo la habilidad para mostrar información en tablas. El control DataList tambien permite especificar comportamiento de edición. DataGrid Muestra información que usualmente se liga a un formato tabular con columnas permitiendo la edición y la ordenación. DropDownList Muestra datos en una lista desplegable. Listbox Muestra datos en una ventana. RadioButtonList Muestra datos en una columna de radio buttons. Seleccionar el adecuado Cuando crea una página ASP.NET, usted tiene la opción de usar controles HTML server o controles Web server. Usted puede mezclar controles de diferente tipo en la misma página esto permite fácilmente actualizar las páginas HTML. Un ejemplo de esta mezcla de controles podrían incluir elementos span HTML que liste la hora local, un control HTML server botón convertido a partir de un elemento HTML, y un control Web server text box que accede a datos en el servidor. La mejor práctica es evitar los controles HTML server. Los controles Web server son más calificados y tienen un modelo de objetos más enriquecido que los controles HTML. HTML server controls Los controles HTML server son elementos modificados de HTML que corren en el servidor en lugar de en el navegador del cliente. Use controles HTML server si: Usted prefiere un modelo de objetos similar a HTML. Los controles HTML server tienen la misma funcionalidad que los controles HTML básicos. Los controles HTML server tambien tienen funcionalidad del lado del servidor igual que los controles Web server. Usted esta trabajando con páginas HTML existentes y quiere fácilmente añadir la funcionalidad de los formularios Web. Porque los controles HTML server tienen exactamente los mismos elementos HTML, usted no necesita reemplazar los controles y correr el riesgo que la sustitución implica o problemas de formateo de página. Los controles que necesitan correr tanto scripts del lado del cliente como del lado del servidor. Se puede escribir script del lado del cliente y utilizar los controles HTML comunes porque los controles son visibles en el cliente. Al mismo tiempo, puede tener código del lado del servidor porque tambien son controles server. El ancho de banda es limitado y necesita un mayor procesamiento del lado del cliente porque estos tienen un reducido ancho de banda. Controles Web server Los controles ASP.NET Web server no solo son una aproximación de los controles HTML, tambien incluyen un número de nuevos controles que no existen en HTML. Utilice controles Web server si: Usted prefiere un modelo de programación parecido a Microsoft Visual Basic®. También podra usar una programación orientada a objetos, identificando controles mediante el atributo ID, y la separación facil de la lógica de la interfaz de usuario. Con los controles Web server, usted también puede crear aplicacciones con controles anidados y capturar eventos. Se puede crear una página Web que puede ser visualizada por una variedad de navegadores. Porque la lógica dentro de los controles Web server posibilitan crear HTML enfoca a las características del navegador del cliente, puede escribir código para varios navegadores sin preocuparse de errores en los navegadores mas antiguos, dando la posibilidad a los usuarios mas antiguos de acceder a todo la funcionalidad de la página Web. Necesita específica funcinalidad, como un calendario o un rotator, que estan disponibles solo en los controles Web server. El ancho de banda no es limitado y las idas y los ciclos peticion - respuesta de los controles Web server no causará problemas con el ancho de banda. 5.- Añadir código a los Formularios Web Utilización de las páginas Code-Behind Usted puede añadir código a sus Formularios Web utilizando uno de los siguientes tres métodos: Código Mixto. El código esta en el mismo archivo que el contenido de la página Web mezclado con el HTML. Este método es el menos apropiado, porque dificulta la lectura y el trabajo con este archivo. Sin embargo éste método es usado en las Active Server Pages (ASP). Código Interno. El código está en una sección SCRIPT en el mismo archivo que contiene el HTML. Code-behind. El código se encuentra en un archivo separado del HTML. El archivo es llamado página code-behind. En Visual Studio .NET, el método por defecto para añadir código a los Formularios Web es poner todo el código en una página de code-behind. Qué son las páginas Code-Behind? El método por defecto para implementar código de lado del servidor en Visual Studio .NET es el uso de las páginas de code-behind. Cuando usa las páginas code-behind, la lógica de programación esta separada de los elementos visuales de la página. La separación de la lógica del diseño permite a los desarrolladores trabajar sobre las páginas de code-behind mientras los diseñadores gráficos trabajan sobre la interfaz de usuario (UI). Nombrar las páginas de code-behind Las páginas de Code-behind contienen toda la lógica de programación para una página Web. Cada página Web en la aplicación Web tiene su propia página de code-behind. Por defecto estas páginas tienen el mismo nombre que las páginas Web con la cual estan asociadas, pero con la extensión .aspx.vb o .aspx.cs, dependiendo del lenguaje que fue usado en la página. Por ejemplo, la pagina Web Form1.aspx tendrá un página de code-behind llamada Form1.aspx.vb o en C# Form1.aspx.cs. Nota Una página code-behind solo puede contener código en un solo lenguaje. No se puede combinar código en Visual Basic .NET y C# en la misma página de code-behind. Entendiendo como trabajan las Páginas de Code-Behind Para que las páginas de code-behind trabajen cada página .aspx page debe tener asociada una página de code-behind page, y este debe estar compilado antes que la información sea retornada al navegador cliente. Aunque cada Formulario Web contiene dos archivos separados (la página .aspx y la página code-behind), la página Web se toma como una unidad cuando la aplicación Web se está ejecutando. La página code-behind puede ser precompilada por Visual Studio .NET cuando se compila la Aplicación Web, o cuando el just-in-time (JIT) compile la primera vez que el usuario accedió a la página. Enlace entre los dos archivos 7 La página .aspx necesita ser asociada con la página code-behind page. Visual Studio.NET añade tres atributos para las directivas @ Page de la página .aspx para lograr esta asociación: Codebehind. Este atributo es usado por Visual Studio .NET para internamente asociar los archivos. Src. Este atributo es el mismo que la página de code-behind, y es usado si la aplicación Web no fue precompilada. Inherits. Este atributo permite que la página .aspx herede las clases y los objetos de las páginas de code-behind. Nota El atributo Inherits es sensible a la capitalización (case-sensitive). Un ejemplo de las directivas de @ Page para el archivo llamado Page1.aspx será mostrado en el siguiente código: <%@ Page Language="vb" Inherits="Project.WebForm1" Codebehind="Page1.aspx.vb" Src="Page1.aspx.vb" %> Compilación JIT Cuando una página es compilada por JIT el code-behind será compilado la primera vez que el cliente realiza la petición de la página .aspx page. Después de la primera petición, todas las subsecuentes peticiones utilizan el archivo compilado. De esta manera, la primera petición de la página tarda, pero las subsecuentes peticiones son rápidas. Si quiere utilizar la compilación JIT debería usar el atributo Src de las directivas de la página @ Page. Nota La compilación JIT mantendrá el tamaño del proyecto pequeño y permitirá que se actualice sin recompilar todo el site. Ejecución Cuando un usuario pide una página .aspx, el archivo DLL procesa la petición entrante y responde creando el HTML y script apropiado, y luego devuelve la petición al navegador. Pre compilación Si se omite el atributo Src en la directiva de página @ Page en un archivo .aspx, la página es precompilada cuando compila la aplicación Web en Visual Studio .NET. Por defecto, Visual Studio .NET no añade el atributo Src, por tanto todas las páginas de code-behind para los Formularios Web en un proyecto son compilados cuando se compila el mismo. Este ahorra considerablemente tiempo de proceso en el Servidor Web. La precompilación del code-behind también simplifica el deploy del Web site porque no se tiene que distribuir el code-behind con las páginas .aspx. 6.- Qué son los procedimientos Evento? Los dinámicos e interactivos Formularios Web reaccionan a las entradas del usuario. Los procedimientos eventos son usados para manejar las interacciones del usuario con el Formulario Web. Definición Cuando el usuario interactúa con un Formulario Web son generados eventos. Se diseña la aplicación Web para realizar una apropiada tarea cuando el evento es generado. Un procedimiento evento es la acción que ocurre en respuesta del evento generado. Hay dos tipos de procedimiento evento: de lado del cliente y de lado del servidor. Cada uno tiene ventajas y desventajas. Procedimientos evento de lado del cliente Estos eventos son manejados en la computadora del cliente, la que realiza la petición del Formulario Web. Cuando un evento de este tipo es generado, no se envía información al servidor. En lugar de eso el browser del cliente interpreta el código y realiza las acciones asociadas con el evento. Los eventos del lado del cliente solo pueden ser usados mediante los controles HTML, además no pueden acceder a los recursos del servidor. Por ejemplo, no podría usar script del lado del cliente para acceder a bases de datos. Usos de Eventos Cliente Los Eventos Cliente son usados por los eventos que se quiere que pasen inmediatamente, porque no requieren una ida y vuelta al servidor Web (enviar información al servidor Web y esperar la respuesta). Por ejemplo, si quisiera validar información de un text box antes que esta viaje al servidor. Usted puede usar script del lado del cliente para validar la información fácilmente, antes que esta sea enviada al servidor Web para su procesamiento. Especificando los procedimientos de eventos cliente Usted especifica estos procedimientos mediante la creación de bloques <SCRIPT> en la página Web como se muestra en el siguiente código: <SCRIPT language="javascript"> Eventos del lado del Servidor A diferencia de los eventos cliente, los eventos servidor requieren que se envíe información al servidor Web para que esta se procese. Aunque esto significa un costo en tiempo la utilización de estos eventos tiene mucho más poder que los eventos del lado del cliente. Eventos del lado del Servidor (Server-side) Los eventos Server-side consisten en código compilado que se encuentra en el Servidor Web estos procedimientos pueden ser usados para manejar eventos que son generados por los controles THML server o los controles Web Server. Los eventos Server-side tienen acceso a los recursos del servidor que normalmente no están disponibles para los eventos client-side. Usted puede especificar un evento server-side mediante el atributo runat="server" en el tag script, como se muestra en el siguiente código: <SCRIPT language="vb" runat="server"> Soporte de Eventos Porque los eventos server-side requieren una ida y vuelta del Servidor Web, los tipos de eventos soportados están limitados. Con los eventos clientside, se podía incluir código para procesar eventos de las teclas del mouse y eventos onChange. Mientras los eventos server-side soportan eventos click y una versión especial de onChange, estos no soportan eventos que ocurren con frecuencia, como los clicks del mouse. Creación de Procedimientos Evento La creación de los eventos server-side event en Visual Studio .NET involucra dos pasos. Primero necesita crear el control que generara el evento en el Formulario Web. Segundo, en la página code-behind, necesita proveer el código que es necesario para manejar los eventos. Cuando hace doble click en un control en Visual Studio .NET, Visual Studio .NET declara una variable (con el mismo nombre que el atributo id del control) y esta crea una plantilla de procedimiento. Cuando usa Visual Basic .NET, con Visual Studio .NET además se añade Handles con los controles añadidos. Los Handles permiten que cree múltiples procedimientos evento para un solo evento. Nota Por defecto, Visual Studio .NET usa los Handles porque el atributo AutoEventWireup de la directiva @ Page esta puesta en false. Si este atributo estuviera en true, los controles serían ligados a los procedimientos evento mediante un nombre específico, que es como eran manejados los eventos en Visual Basic 6. El siguiente código HTML muestra un Web Form con un solo botón con un atributo id = cmd1; el evento click del botón será manejado sobre el servidor: <form id="form1" method="post" runat="server"> <asp:Button id="cmd1" runat="server"/> </form> Argumentos de Eventos Todos los eventos pasan dos argumentos al procedimiento evento: el emisor del evento y una instancia de la clase que guarda datos sobre el evento, esta instancia es usualmente de tipo EventArgs, y a menudo no contiene ninguna información adicional; sin embargo, para algunos controles, esta es de un tipo que se especificado para el control. Por ejemplo, para el control Web ImageButton el segundo argumento es del tipo ImageClickEventArgs, quien incluye información acerca de las coordenadas donde el usuario hizo click. El siguiente procedimiento evento muestra las coordenadas en un control Label: Sub img_OnClick(ByVal s As System.Object, _ ByVal e As System.Web.UI.ImageClickEventArgs) _ Handles ImageButton1.Click Label1.Text = e.X & ", " & e.Y End Sub 9 Interactuar con controles en procedimientos Evento En varias aplicaciones Web, usted necesita leer de los controles y escribir para controles sobre un Formulario Web. Usted puede hacerlo con los procedimientos eventos del lado del servidor. Leer propiedades desde un control Web server Dentro de un procedimiento del lado del servidor, se puede leer información de un Web server control. Por ejemplo, suponga que tiene el siguiente Formulario Web con un Textbox y un Button: <FORM id="Form1" runat="server"> <asp:TextBox id="txtNombre" runat="server" /> <asp:Button id="cmd1" runat="server" /> </FORM> Cuando el usuario hace click en el botón, se puede leer el texto que él introdujo en el text nox. El siguiente código asigna a la variable strSaludo la concatenación de el texto “Hola” y el texto que se encuentra en el text box txtName: String strSaludo = "Hola " & txtNombre.Text Por ejemplo, si el usuario introduce “Juan” en el text box txtNombre, la variable strGreeting debería contener el texto “Hola Juan”. Salidas en el control Usted puede sacar información directamente en el control Web Server utilizando las propiedades del control. Por ejemplo, suponga que tiene un control Web server de tipo Label sobre una página ASP.NET como se muestra: <asp:Label id="lblGreeting" runat="server">Greeting</asp:Label> El siguiente código del lado del servidor asigna una cadena a la propiedad Text de lblGreeting como se muestra: lblGreeting.Text = "nuevo texto" Tip En ASP, se usaba la colección Request.Forms para leer las propiedades de los controles del formulario y usaba el Response.Write para la salida del texto. Sin embargo estos métodos siguen trabajando con ASP.NET, pero no son los recomendados. En lugar de esto, debe usar los controles Web server labels y spans. 7.- Eventos de Página Cuando una página ASP.NET es pedida, hay una serie de eventos que ocurre. Estos eventos siempre ocurren en el mismo orden, que esta referido en el siguiente ciclo. El ciclo consiste en los siguientes eventos, que ocurren en el siguiente orden: 1. Page_Init. Este evento de página inicializa la página con la creación e inicialización de los controles Web server. 2. Page_Load. Este evento corre cada vez que la página es solicitada. 3. Control events. Los eventos de control incluyen eventos de cambio (por ejemplo, Textbox1_Changed) y los eventos de acción (por ejemplo, Button1_Click). 4. Page_Unload. Este evento de página ocurre cuando la página es cerrada o el control es pasado a otra página. El fin del ciclo de eventos de la página incluye el desalojo de la página de memoria. La mayoría de los eventos no ocurren hasta que el Formulario Web es devuelto al servidor. Por ejemplo, el evento Change es manejado en un orden aleatorio en el servidor después que el Formulario Web es devuelto. Inversamente, el evento Click puede causar que el formulario sea enviado al servidor inmediatamente. Si, por ejemplo, un usuario introduce un número en un control y hace click en el botón Submit, el evento Change del text box no va ser procesado hasta que el Formulario Web sea enviado al servidor mediante el evento Click. Postbacks En ASP.NET, los formularios son diseñados para enviar la información con página ASP.NET para que esta sea procesada. Este proceso es llamado postback. El Postbacks puede ocurrir por ciertas acciones del usuario. Por defecto, solo el evento click del botón causa el postback del Formulario Web. Sin embargo se dispone de un conjunto de controles con la propiedad AutoPostBack, si esta en true, el postback es forzado para los eventos del control. Por ejemplo, el siguiente código HTML es un ejemplo de usar la propiedad AutoPostBack en un list box. Cada vez que el usuario cambia el valor del list box, el evento SelectedIndexChanged es lanzado sobre el servidor y actualiza el text box: <asp:DropDownList id="ListBox1" runat="server" AutoPostBack="True"> <asp:ListItem>First Choice</asp:ListItem> <asp:ListItem>Second Choice</asp:ListItem> </asp:DropDownList> Manejo de Eventos Postback El evento Page_Load corre en todas la peticiones de la página, inclusive si es la primera petición o si es un postback. Uso de Page.IsPostBack Porque el evento Page_Load corre con todas las peticiones de la página, todo el código dentro del evento Page_Load será ejecutado cada vez que la página es pedida. Sin embargo, cuando usted usa un evento postback, talvez no quiera que todo el código se ejecute nuevamente. Ligar dos controles entre si Usted puede ligar un control con el contenido de otro. Ligar dos controles es particularmente usado para mostrar valores de list boxes o drop-down lists. El siguiente código ejemplo muestra como ligar un control Label con el contenido de un drop-down list. Usando los tags de ligado <%# y %>, usted pone el atributo Text del control Label a el SelectedItem del list box: <asp:Label id="lblSelectedValue" runat="server" Text="<%# lstOccupation.SelectedItem.Text %>" /> El siguiente ejemplo muestra el código para ligar el label con el list box: <form runat="server"> <asp:DropDownList id="lstOccupation" autoPostBack="true" runat="server" > <asp:ListItem>Lider de Proyecto </asp:ListItem> <asp:ListItem>Tester</asp:ListItem> <asp:ListItem>Asistente</asp:ListItem> </asp:DropDownList> <p> You selected: <asp:Label id="lblSelectedValue" Text="<%# lstOccupation.SelectedItem.Text %>" runat="server" /> </p> </form> En el anterior código note que la propiedad AutoPostBack del drop-down list es puesta a true, lo cual causa que automáticamente se haga un postback cuando el valor del list box cambia. En el evento Page_Load, se llama al método DataBind de la página entera o solo del Label como se muestra en el siguiente código: Sub Page_Load (s As Object, e As EventArgs) _ Handles MyBase.Load lblSelectedValue.DataBind() End Sub Usted puede usar el Page.DataBind() si quiere hacer data bind para todos los elementos de la página. El anterior ejemplo de código liga solo el control Label con datos, por se puede usar la sintaxis control.DataBind() donde control es el atributo id del label . 11