ASP (Active Server Pages)

Informática. Programación Web. Redes. Cliente. Servidor. Visual. Dinámica. {XML}. Formulario. Bases de datos. Orientada objetos. {HTTP}. {SQL}. Redes. NET

8 downloads 440 Views 989KB Size

Recommend Stories


Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP
Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Server y ASP 1 Aplicaciones Cliente-Servidor e Internet con Visual FoxPro, SQL Serv

Yellow Pages
Formato de Referenciamiento de Páginas Amarillas / Yellow Pages http://www.unipamplona.edu.co/KMGestionDelConocimiento/ Información General Nombres y

ENGLISH - PAGES ESPAÑOL - PAGINAS FRANÇAIS - PAGES ITALIANO - PAGINE DEUTSCH - SEITEN
I M P O RTA N T S A F E T Y I N S T RU C T I O N S ENGLISH - PAGES . . . . . . . . . . . 6-9 The lightning flash with arrowhead symbol within an equ

Story Transcript

ASP.NET TEMA 1: PRIMEROS PASOS PROCESAMIENTO DINÁMICO Internet se basa en el modelo cliente−servidor. Modelo petición − respuesta: Un equipo contiene información (servidor) y otro solicita la información (cliente). Es estático. No puede proporcionar información dinámica o procesamiento. (HTML) Un equipo contiene información (servidor) y otro solicita la información (cliente) dinámicamente. (ASP). El servidor analiza la información antes de enviarla. Modelo controlado por eventos: El servidor espera a que algo ocurra en el cliente para entrar en acción y ejecutar alguna tarea. (ASP.NET) ASP.NET sabe lo que ocurre en el cliente porque se basa en el procesamiento en el cliente para simular un modelo controlado por eventos. Procesamiento en el cliente Código de programación en una página HTML que el explorador web ejecuta. <script language="JavaScript"> ¡Bienvenidos a mi clase! 1

Las etiquetas <script> encierran una porción de código que contiene comandos para el cliente, conocida como secuencia de comandos. Hay dos lugares para ejecutar el código: en el servidor, donde todo se devuelve como HTML y en el cliente. Estos dos lugares para el código son distintos y no tienen relación entre sí. En el cliente: No se procesa en el servidor. Se escribe en secuencias de comandos que indican al cliente que haga algo. Se usa para realizar efectos dinámicos en el cliente como cuadros de mensaje. En el servidor: Se ejecuta sólo en el servidor. Todo se convierte en HTML o XML antes de enviarlo al cliente. Se utiliza para procesar resultados y devolver datos. Cómo enlaza ASP.NET los elementos ASP.NET sabe lo que ocurre en el cliente porque éste se comunica con el servidor mediante una petición. A través de las secuencias de comandos en el cliente, ASP.NET proporciona información de lo que éste hace durante las peticiones. Ejemplo: Vas a una biblioteca y el bibliotecario en todo momento sabe lo que necesitas, si te caes te trae una venda, si quieres leer te trae un libro, si tienes sed, agua ¿Cómo lo sabe? Tiene una red de espías que no dejan de observarte aunque tú no lo sepas. Los espías son las secuencias de comandos en el cliente. CREACIÓN DE PÁGINAS ASP.NET <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventargs) lblMensaje.Text = "¡Recíbeme con alegría soy tu profe de ASP.NET!" End sub Un archivo sencillo, se puede escribir en un editor o en un block de notas. Hay que guardarlo en la carpeta inetpub/root. Para visualizarla en el explorador: http://localhost/nombreCarpeta/NombrePagina.aspx.

2

ELEMENTOS DE UNA PÁGINA ASP.NET <%@ Page Language="VB" %> Directiva de página que da la información específica a la página ASP.NET. Nos dice que el lenguaje usado es Visual Basic. <script runat="server"> Sub tbMensaje_Change(Sender As Object, E As EventArgs) lblMensaje.Text = "Hola, " + tbMensaje.Text + "." End Sub Bloque de declaración de código. Se parece al código en el lado del cliente, pero incluye la etiqueta runat="server". Éste es el código que ASP.NET utiliza para procesar sus páginas y es donde controlaremos la funcionalidad de la página. Es mejor colocarlo entre las etiquetas auque pueden colocarse en cualquier parte de la página. Empieza la página HTML Aprendiendo ASP.NET Lección 2

<% Response.Write("Nuestra primera página

") %> Éste es el bloque proveedor de código, empieza con <% . Contiene instrucciones que se usan para producir un resultado. Muestra un texto en pantalla. Se van a usar con moderación porque no son compilados.

Tenemos un elemento HTML, pero con la etiqueta runat=server. Este formulario se convierte en formulario web. Todo lo que contenga será vigilado por ASP.NET. Por favor, teclea tu nombre:

Éstos son controles web. Funcionan de forma similar a los controles HTML, pero pueden usar ASP.NET. Llevan la etiqueta runat=server 3

ASP y ASP.NET son totalmente distintos pero pueden operar en conjunto. Esto quiere decir que el servidor web puede procesar tanto páginas ASP como ASP.NET. EJERCICIO Realizar una página que nos muestre un saludo por pantalla. TEMA 2: CREACIÓN DE PÁGINAS ASP.NET UNA APLICACIÓN SENCILLA <%@ Page Language="VB" Debug="True" %> <%@ Page Language="c#" Debug="True" %> <script runat="server"> Sub tbMensaje_Change(Sender As Object, E As EventArgs) lblMensaje.Text = "Hola, " + tbMensaje.Text + "." End Sub <script runat="server"> public void tbMensaje_Change (Object sender, EventArgs E) { lblMensaje.Text = "Hola, " + tbMensaje.Text + "."; } Aprendiendo ASP.NET Lección 2


<% Response.Write("Nuestra primera página

") %> <% Response.Write("Nuestra primera página

"); %>

Por favor, teclea tu nombre: 4

Obtiene un valor del usuario y lo despliega con un saludo. No se ha establecido una acción en el formulario, por lo que retorna a sí mismo. ,, son controles de servidor. El atributo id es un nombre único que damos al control. Todas las etiquetas deben tener apertura y cierre. Si no vamos a poner nada entre ellas podemos ponerlo así . Sin la etiqueta de cierre ASP.NET producirá errores. El cuadro de texto tiene el atributo OnTextChanged=tbMensaje_Change. Tiene un evento que es TextChanged. Hemos indicado a ASP.NET que ejecute el procedimiento tbMensaje_Change cuando ocurra ese evento. Estos eventos se controlan en el servidor. BLOQUES DE DECLARACIÓN DE CÓDIGO <script runat="server"> Sub tbMensaje_Change(Sender As Object, E As EventArgs) lblMensaje.Text = "Hola, " + tbMensaje.Text + "." End Sub <script runat="server"> public void tbMensaje_Change (Object sender, EventArgs E) { lblMensaje.Text = "Hola, " + tbMensaje.Text + "."; } La etiqueta <script> se utiliza en secuencias de comandos del cliente. Delimita una sección de la página que la aplicación manejará de forma dinámica, conocida como bloque de declaración de código. No se convierte en HTML dentro de la página, si no que contiene código que será ejecutado por el servidor. No olvidar incluir runat=server. 5

Es mejor separar el bloque <script> tanto como sea posible del código de presentación o de HTML. <% Response.Write("Nuestra primera página

") %> Es equivalente a poner <%="Nuestra primera página

" %> FLUJO DE PÁGINA La primera vez que se solicita la página desde el explorador web ASP.NET compilará el código que esté en los bloques de declaración. Por esto el explorador tarda en mostrar la página. Sin embargo, si se solicita una segunda vez sin modificar el código no habrá retardo alguno. Pero si se modifica algo ASP.NET volverá a compilar la página. Una vez que se envía el formulario y se compila el código, ASP.NET empieza a procesar todo el código que hemos generado y cualquier evento que haya ocurrido. En el ejemplo, el evento TextChanged ocurrió cuando se tecleó algo en la caja de texto. El motor de ASP.NET explora este evento, determina que debe hacer y lo hace. En ese momento, ASP.NET convierte cualquier control en elemento HTML. Luego evalúa cualquier bloque proveedor de código y devuelve el HTML necesario. Por último, el HTML resultante se envía al explorador web, que recibe sólo HTML estándar. Por lo que cualquier explorador web puede mostrar la página. ESTADO VISUAL Describe el aspecto de un objeto en un momento determinado. Por ej. Si un botón está o no pulsado. Una aplicación que lleve el control de esta información se conoce como estado de conservación. Si llenamos un formulario HTML y volvemos a él después, es posible que esté vacío. Esto es porque web es un medio sin estado. ASP.NET lleva automáticamente un control del estado visual. Esto quiere decir que si rellenamos un formulario HTML y volvemos a él después los datos estarán allí. ASP.NET hace esto al devolver campos ocultos de formulario HTML siempre que indicamos runat=server en el formulario. COMO ESCRIBIR CÓDIGO DE ASP.NET Y HTML Hay dos formas de escribir código de ASP.NET: en los bloques de declaración de código o en los bloques proveedores de código. Es mejor el primer método. También hay varias formas de escribir HTML puro mediante ASP.NET, como con Response.Write o con la etiqueta <%=. Debemos: Separar el código ASP.NET del HTML tanto como podamos mediante bloques de declaración de código. No debemos: Utilizar bloques proveedores de código para intercalar código o resultados HTML (con Response.Write) cuando otro método cumpla mejor con el trabajo.

6

COMENTARIOS EN EL CÓDIGO Hay tres formas de comentar el código: Para comentar sólo el código HTML. ` (apóstrofo) con Visual Basic // /* comentario */ con c# <%− − y − − %> comentarios para el servidor COMO SE DIVIDE EN VARIAS LÍNEAS Con Visual Basic: <% Response.Write _ (hola) %> <% Response.Write (Te estoy & _ saludando) %> Con C#: No se hace nada especial. COMO IMPORTAR ESPACIOS DE NOMBRES <%@ Import Namespace=System.Drawing %> para VB <%@ Import Namespace="System.Data" %> para c# Importa todas las clases del espacio de nombre System.Drawing, como font e image. De forma predeterminada, se importan automáticamente los siguientes a todas las páginas ASP.NET: System System.Collections System.IO System.Web System.Web.IU System.Web.IU.HtmlControls System.Web.IU.WebConstrols TEMA 3: USO DE OBJETOS EN ASP.NET

7

EL OBJETO RESPONSE Permite la interacción del servidor con el cliente. Cuando un usuario solicita una página asp.net genera una instancias del objeto HttpResponse, el cual contiene información (propiedades y métodos) necesaria para comunicarse con el cliente. El nombre de la instancia es Response, de modo que podrá utilizar este nombre para acceder a las propiedades y métodos del objeto HttpResponse. El método Write <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventargs) Dim i As Integer Response.Write("Éste es un ejemplo") Necesita una cadena como parámetro Response.Write("


") For i = 1 To 5 Response.Write("¡Hola!
") Next End Sub <%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) { int i; Response.Write("Éste es un ejemplo"); Response.Write("
"); 8

for ( i = 1;i<5;i++) { Response.Write("¡Hola!
"); } } VB.Net realiza cierta conversión de tipos de datos automáticamente. La conversión de un integer a string podría servir como ejemplo. Es por ello que se puede utilizar Response.Write (6). Pero c# no realiza la misma conversión automáticamente, por lo tanto, usar Response.Write (6) produciría un error. Hay que usarlo así: Response.Write (int.ToString(6)) COMO ALMACENAR PAGINAS EN EL BUFER El almacenamiento en el búfer permite controlas en qué momento se enviará el resultado al explorador web. Cuando se almacena el resultado en el búfer, no se envía nada al explorador web mientras no se ejecute todo el código. Este es el método predeterminado en asp.net. El almacenamiento en el búfer es un buen acelerador de rendimiento. Para desactivarlo: BufferOutput=false. <% Response.Buffer=False %> Para controlar el búfer métodos Clear, Flush y End. Clear: vacía el búfer Flush: envía inmediatamente al explorador lo que hay en el búfer End: evita que response envíe algo nuevo al explorador, sólo se envía la salida que haya actualmente en el búfer. EJERCICO: ANALIZAR LA SALIDA DE ESTE PROGRAMA <%@ Page Language="VB" %> <script runat="server">

9

Sub Page_Load(obj as object, e as eventargs) Dim i As Integer Response.Write("Antes de vaciar
") Response.Flush() For i = 0 To 5000 ' Sólo para perder el tiempo Next Response.Write("Luego de vaciar, antes de limpiar
") Response.Clear() For i = 0 To 5000 ' Sólo para perder el tiempo Next Response.Write("Luego de limpiar, antes de finalizar
") Response.End() For i = 0 To 5000 ' Sólo para perder el tiempo Next Response.Write("Luego de finalizar
") End Sub <%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) {

10

int i; Response.Write("Antes de vaciar
"); Response.Flush(); For (i = 0;i<500;i++) { // Sólo para perder el tiempo } Response.Write("Luego de vaciar, antes de limpiar
"); Response.Clear(); For (i = 0;i<500;i++) { // Sólo para perder el tiempo } Response.Write("Luego de limpiar, antes de finalizar
"); Response.End(); For (i = 0;i<500;i++) { // Sólo para perder el tiempo } Response.Write("Luego de finalizar
"); } VER BUFFER.ASPX COMO REDIRIGIR A LOS USUARIOS

11

Método Rediret. <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventargs) Response.Redirect(http://www.marian.com) End Sub ¡Hola! Cuando un usuario esta página, será enviado inmediatamente a www.marian.com y nunca verá el mensaje de saludo. Por ejemplo, es un método muy útil para enviar a un usuario a algún lugar de acuerdo con su login y su password capturados en un formulario. EL OBJETO REQUEST Permite la interacción del explorador web con el servidor. El explorador envía información al servidor cuando solita una página. Cuando esto ocurre, se genera un objeto HttpRequest para tratar con la información enviada. Este objeto se llama Request. El objeto request representa la petición de un cliente, y el servidor web envía una respuesta utilizando los objetos request y response. COMO AVERIGUAR LA INFORMACIÓN DEL CLIENTE Una función del objeto Request es obtener informació personal a través del explorador web, por ejemplo, lo que ha capturado un usuario en un formulario o los valores de cadena de consulta, por ejemplo, http://www.marian.com?id=yo&edad=33 La cadena de consulta, ?id=yo&edad=33, presenta los datos en forma de pares de valor, clave. El primer par siempre está precedido de la ? y los siguientes separados por &. Esta cadena es útil para pasar información de una página a otra. Response.Redirect (mipagina.aspx?id=yo) Sólo se pueden reconocer hasta 255 caracteres en esta cadena. Request.Querystring devuelve id=yo&edad=33 Request.Querystring(id) devuelve yo

12

Request.Form devuelve todos los campos de un formulario Request.Form (nombre) devuelve un valor indicado por nombre Tanto las propiedades Querystring como Form representan colecciones de información. Otras colecciones utilizadas por Request son ServerVariables y Cookies. La primera devuelve información del servidor, como la IP o el protocolo http. La segunda devuelve información de las coookies. Variables de entorno URL .... el url de la página asp.net empezando después del servidor y nombre de dominio, después de http://www.marian.com/ PATH_INFO lo mismo que url PATH_TRANSLATED Toda la ruta física de asp.net en el servidor. SERVER_NAME El nombre del servidor web SERVER_SOFTWARE El nombre del software del servidor web. (Microsoft IIS 5.0) EL OBJETO HttpCookie Una cookie es un pequeño archivo en la computadora del usuario que contiene información específica para un sitio web. El objeto HttpCookie ofrece métodos para acceder y generar esas cookies. La forma común de manejar las cookies es mediante los objetos Request y Response, los cuales cuentan con una propiedad Cookies que devuelve una referencia a un objeto HttpCookie. COMO GENERAR COOKIES Dos formas de hacerlo: Generar varias cookies, cada una con un valor en particular, o puede generar una cookie con diversos pares de clave, valor. Para vb: Response.Cookies(MiCookie).Value=Una cookie Response.Cookies(MiCookie2) (Usuario)=yo Response.Cookies(MiCookie2) (edad)=33 En c#con [] en lugar de () Propiedad Expires para que la cookie quede inhabilitada cuando le digamos: Response.Cookies(MiCookie2).Expires=DateTime.FromString(1/1/2005)

13

Response.Cookies(MiCookie2).Expires=DateTime.Now.AddMonths(1) Para suprimir una cookie del cliente establecer expires a una fecha anterior o a 0. Propiedades: Domain: Restringe el uso de la cookie al dominio que le indiquemos. Path: Similar a Domain, pero solo permite el acceso a la cookie a las páginas ASP.Net que se encuentren en una ruta específica del servidor. HasKeys:Indica si esta cookie tiene claves o es una cookie con un único valor. Secure: Indica a Asp.net si debe o no transmitir la cookie de forma segura, es decir, sólo bajo el protocolo HTTPS. El valor predeterminado es false. COMO ACCEDER A LAS COOKIES Utilizar el objeto Request Response.Write (Request.Cookies (Micookie).Value) Response.Write (Request.Cookies (Micookie2).(Usuario)) Para iterar por las claves de la cookie. La mayor parte del código se encuentra en el controlador de eventos Page_Load. <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventArgs) Dim strVariable As String ' Establezco algunos valores de cookie Response.Cookies("temp").Value = "HI" Response.Cookies("CookieDe21la")("Nombreusuario") = "Tania" Response.Cookies("CookieDe21la")("Preferencia") = _ "800x640" Response.Cookies("CookieDe21la")("Contrasenia") = _ "QueInteresanteCookie" Response.Cookies("CookieDe21la")("UltimaVisita") = _ DateTime.Now.ToString 14

Response.Cookies("CookieDe21la")("UserAgent") = _ Request.ServerVariables("HTTP_USER_AGENT") Devuelve el valor del user Agent (Ej. Mozilla/4.0) Devolvemos los valores de las cookies con ayuda de un bucle for... each. for each strVariable in Response.Cookies _ ("CookieDe21la").Values Label1.Text += "" & strVariable & ": " & _ Request.Cookies("CookieDe21la")(strVariable) & "
" next end sub
<%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) { string strVariable; Response.Cookies["temp"].Value = "HI"; Response.Cookies["CookieDe21la"]["Nombreusuario"] = "Tania"; Response.Cookies["CookieDe21la"]["Preferencia"] = "800x640"; Response.Cookies["CookieDe21la"]["Contrasenia"] = "QueInteresanteCookie"; Response.Cookies["CookieDe21la"]["UltimaVisita"] = DateTime.Now.ToString;

15

Response.Cookies["CookieDe21la"]["UserAgent"] = Request.ServerVariables("HTTP_USER_AGENT"); foreach (strVariable in Response.Cookies ["CookieDe21la"].Values) { Label1.Text += "" + strVariable + ": " + Request.Cookies["CookieDe21la"](strVariable) + "
"; } }
MÁS SOBRE COOKIES Escritura de las cookies Para escribir una cookie se utiliza la propiedad Response de la página, que muestra un objeto que permite agregar datos a la información que la página envía al explorador. El objeto Response admite una colección llamada Cookies, a la que agregará las cookies que desee escribir en el explorador. Se pueden agregar cookies a la colección Response.Cookies de dos maneras diferentes. En el siguiente ejemplo se muestran dos métodos para realizar esta tarea: Response.Cookies("userName").Value = "mike" Response.Cookies("userName").Expires = DateTime.Now.AddDays(1) Dim aCookie As New HttpCookie("lastVisit") aCookie.Value = DateTime.Now.ToString aCookie.Expires = DateTime.Now.AddDays(1) Response.Cookies.Add(aCookie) Response.Cookies["userName"].Value = "mike" 16

Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1) Para crear una cookie con subclaves, puede utilizar una variación de la sintaxis que se utiliza para escribir una cookie individual. En el siguiente ejemplo se muestran dos formas de escribir la misma cookie, ambas con dos subclaves: Response.Cookies("userInfo")("userName") = "mike" Response.Cookies("userInfo")("lastVisit") = DateTime.Now.ToString Response.Cookies("userInfo").Expires = DateTime.Now.AddDays(1) Dim aCookie As New HttpCookie("userInfo") aCookie.Values("userName") = "mike" aCookie.Values("lastVisit") = DateTime.Now.ToString aCookie.Expires = DateTime.Now.AddDays(1) Response.Cookies.Add(aCookie) Response.Cookies["marian"]["BackColor"]="#99ccff"; Response.Cookies["marian"]["ForeColor"]="#0000cc"; Response.Cookies["marian"]["LinkColor"]="#ffcccc"; Response.Cookies["marian"]["FontSize"]="12pt"; Response.Cookies["marian"]["FontName"]="Comic Sans MS"; Response.Cookies["marian"].Expires=DateTime.Now.AddMonths(1); <%@ Page Language="c#" %> <script runat="server"> public void Page_Load(Object obj,EventArgs e) { HttpCookie aCookie = new HttpCookie("userInfo"); aCookie.Values["userName"] = "mike"; aCookie.Values["lastVisit"] = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);

17

} Limitar las cookies a una carpeta o aplicación Para limitar las cookies a una carpeta del servidor, establezca la propiedad Path de éstas tal como se describe a continuación: Dim appCookie As New HttpCookie("AppCookie") appCookie.Value = "Escrita " & Now.ToString appCookie.Expires = Now.AddDays(1) appCookie.Path = "/Application1" Response.Cookies.Add(appCookie) Limitar el ámbito de las cookies a un dominio De forma predeterminada, las cookies se asocian a un determinado dominio. Por ejemplo, en el sitio www.contoso.com, las cookies que escriba se enviarán al servidor cuando los usuarios soliciten cualquier página de este sitio. (Excepto las cookies con un valor de ruta específico, tal como ya hemos visto en el apartado anterior a éste). Si el sitio contiene subdominios por ejemplo, contoso.com, ventas.contoso.com y soporte.contoso.com podrá asociar las cookies a un determinado subdominio. Para ello, establezca la propiedad Domain de la cookie de la siguiente forma: Response.Cookies("domain").Value = DateTime.Now.ToString Response.Cookies("domain").Expires = DateTime.Now.AddDays(1) Response.Cookies("domain").Domain = "support.contoso.com" Cuando el dominio se establece de este modo, la cookie únicamente estará disponible para las páginas del subdominio que se haya especificado. También puede utilizar la propiedad Domain para crear una cookie que puedan compartir varios subdominios. Por ejemplo, establezca el dominio como se muestra a continuación: Response.Cookies("domain").Value = DateTime.Now.ToString Response.Cookies("domain").Expires = DateTime.Now.AddDays(1) Response.Cookies("domain").Domain = "contoso.com" Lectura de las cookies Cuando un explorador realiza una solicitud al servidor, envía junto con ésta las cookies para el servidor. En las aplicaciones ASP.NET, puede leer las cookies mediante la utilización del objeto Request. La estructura del objeto Request es básicamente la misma que la del objeto Response, por lo que puede leer las cookies del objeto Request de un modo muy similar a cómo las escribió en el objeto Response. Los siguientes ejemplos 18

muestran dos modos de obtener el valor de una cookie llamada "userName" y mostrarlo en un control Label: If Not Request.Cookies("userName") Is Nothing Then Label1.Text = Server.HtmlEncode(Request.Cookies("userName").Value) End If If Not Request.Cookies("userName") Is Nothing Then Dim aCookie As HttpCookie = Request.Cookies("userName") Label1.Text = Server.HtmlEncode(aCookie.Value) End If Antes de intentar obtener el valor de una cookie, debe asegurarse de que ésta existe. De lo contrario, obtendrá una excepción System.NullReferenceException. Observe igualmente que realizo una llamada al método HttpServerUtility.HtmlEncode para codificar el contenido de una cookie antes de mostrarla en la página. El motivo para que proceda de ese modo es que estoy mostrando el contenido de una cookie (algo que generalmente no se hace) y quiero asegurarme de que un usuario malintencionado no haya introducido secuencias de comandos ejecutables. Asimismo, el valor de una subclave de una cookie se lee de un modo similar a como se configura. Esta es una forma de obtener el valor de una subclave: If Not Request.Cookies("userInfo") Is Nothing Then Label1.Text = _ Server.HtmlEncode(Request.Cookies("userInfo")("userName")) Label2.text = _ Server.HtmlEncode(Request.Cookies("userInfo")("lastVisit")) End If Lectura de las colecciones de cookies En los ejemplos anteriores se asume que desea leer una determinada cookie cuyo nombre ya conoce. Puede que en ocasiones deba leer todas las cookies disponibles para la página. Para leer los nombres y valores de todas estas cookies puede recorrer la colección Request.Cookies utilizando código como éste: Dim i As Integer Dim output As String = "" Dim aCookie As HttpCookie For i = 0 to Request.Cookies.Count − 1

19

aCookie = Request.Cookies(i) output &= "Nombre de cookie = " & Server.HtmlEncode(aCookie.Name) & "
" output &= "Valor de cookie = " & Server.HtmlEncode(aCookie.Value) & _ & "

" Next Label1.Text = output Request.Cookies["marian"]["FontSize"] Request.Cookies["marian"].Value Nota Cuando ejecute este código, probablemente verá una cookie llamada "ASP.NET_SessionId". Se trata de una cookie que ASP.NET utiliza para almacenar un identificador único para su sesión y que no se guardará en el disco duro de su equipo. Comprobar si un explorador acepta cookies Sub Page_Load() If Not Page.IsPostBack Then If Request.QueryString("AcceptsCookies") Is Nothing Then Response.Cookies("TestCookie").Value = "ok" Response.Cookies("TestCookie").Expires = _ DateTime.Now.AddMinutes(1) Response.Redirect("TestForCookies.aspx?redirect=" & _ Server.UrlEncode(Request.Url.ToString)) Else labelAcceptsCookies.Text = "Aceptar cookies = " & _ Request.QueryString("AcceptsCookies") End If End If End Sub EJERCICIO:

20

Mediante el uso de Cookies personalizar la página del cliente.

Al pulsar personalizar aparece:

21

Seleccionamos y mostramos el resultado:

22

(Solución ejercicio Tema3−cookies−mariancookies) EL OBJETO PAGE Contiene todas las propiedades y métodos de toda la página asp.net que genere. Cuando ejecutamos una página asp.net ésta heredará de la clase Page del .NET Framework Herencia: Una clase define algunos parámetros y métodos para los objetos que se basen en ella. Cuando genere otra clase que se herede de la principal, también heredará sus miembros. También podemos generar sus propios miembros en la clase secundaria. Las páginas asp.net son los objetos secundarios del objeto Page. Cualquier método o propiedad que defina en la página asp.net se convertirá en miembro del objeto basado en su página. Esto significa que si genero otra página podré acceder a los métodos y propiedades de la primera. Miembros útiles integrados:

23

IsPostBack: Indica si un formulario de esta página fue enviado a la misma. DataBind: Enlaza todas las expresiones de datos a los controles de la página. Evento Load: Se desencadena cuando la página comienza a cargarse en el explorador. Eventos: Init: este evento es lanzado cuando la página es inicializada, cuando es lanzado este evento todavía no se han creado por completo los distintos controles de la página. Este evento es tratado en el método Page_Init. Load: este evento se lanzaría a continuación del método Init y es lanzado cuando la página se ha cargado, en este caso todos los controles de la página ya han sido creados. Este evento se lanzará cada vez que la página ASP .NET es ejecutada. Este evento es tratado en el método Page_Load. PreRender: el evento se lanzará justo antes de enviar la información al cliente. Este evento es tratado en el método Page_PreRender, y siempre es lanzado después del evento Load. UnLoad: este otro evento se lanzará en último lugar, y tiene lugar cuando la página ha finalizado de procesarse, es decir, cuando se ha terminado la ejecución de la página y toda la información ha sido enviada al cliente. Este evento es tratado en el método Page_UnLoad. Error: este evento se lanzará cuando se produzca una excepción no tratada dentro de la página. El método Page_Error se utilizará cuando deseemos realizar nuestro propio tratamiento de errores, esto lo veremos más en detalle en el capítulo dedicado al tratamiento de errores y depuración. Propiedades: IsPostBack: esta propiedad de la clase Bolean devolverá true si la página ASP .NET actual ya ha sido enviada al servidor en alguna ocasión. Si tiene el valor false indicará que la página es la primera vez que se carga y nos servirá de indicador para poder inicializar los controles Web de la página o bien realizar otras labores de inicialización. Application: esta propiedad nos va a ofrecer una referencia a un objeto de la clase System.Web.HttpApplicationState, este objeto nos va a permitir almacenar y acceder a información que va a ser común a toda la aplicación Web, es decir, es una información compartida por todos los clientes de una aplicación Web determinada. Esta propiedad es equivalente al objeto integrado Application de anteriores versiones de ASP. Uso del evento Page_Load. Analiza este código <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventArgs) tbMyText.Value = "¡Éste es el evento Page_Load!" End Sub 24

<%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) { tbMyText.Value = "¡Éste es el evento Page_Load!"; }
En el evento Load se verifica la identidad del usuario, se cargan los datos de una base de datos y se redirige al usuario, por ejemplo. Ejemplo de formatos de fechas correctas para DateTime: <%@ Page Language="VB" %> <script runat="server"> sub Page_Load(obj as object, e as eventArgs) Dim Ahora as DateTime = DateTime.Now Dim intHora as Integer = Ahora.Hour 25

Label1.Text = "En este momento son " & _ Ahora.ToString("d") + "

" Label1.Text += Ahora.ToString("D") + "

" Label1.Text += Ahora.ToString("f") + "

" Label1.Text += Ahora.ToString("F") + "

" Label1.Text += Ahora.ToString("g") + "

" Label1.Text += Ahora.ToString("G") + "

" Label1.Text += Ahora.ToString("m") + "

" Label1.Text += Ahora.ToString("r") + "

" Label1.Text += Ahora.ToString("s") + "

" Label1.Text += Ahora.ToString("t") + "

" Label1.Text += Ahora.ToString("T") + "

" Label1.Text += Ahora.ToString("u") + "

" Label1.Text += Ahora.ToString("U") + "

" Label1.Text += Ahora.ToString("y") + "

" Label1.Text += Ahora.ToString("dddd, MMMM dd yyyy") + "

" Label1.Text += Ahora.ToString("ddd, MMM d ""'""yy") + "

" Label1.Text += Ahora.ToString("dddd, MMMM dd") + "

" Label1.Text += Ahora.ToString("M/yy") + "

" Label1.Text += Ahora.ToString("dd−MM−yy") + "

" if intHora < 12 then Label1.Text += "¡Buenos días!" elseif intHora > 12 And intHora < 18 then Label1.Text += "¡Buenas tardes!" else Label1.Text += "¡Buenas noches!"

26

end if end sub

Ejercicio: Mostrar al usuario distintos mensajes dependiendo de la hora a la que se conecte, en C# Solución Tema3−fechas Archivo Global.asax Además de escribir código para interfaces de usuario, los programadores también pueden agregar lógica del nivel de aplicación y código de control de eventos a sus aplicaciones Web. Este código no se encarga de generar interfaces de usuario y no se invoca normalmente en respuesta a solicitudes de páginas individuales. En vez de ello, se encarga de procesar eventos de la aplicación de nivel superior, tales como Application_Start, Application_End, Session_Start, Session_End, etc. Los programadores crean esta lógica mediante un archivo Global.asax ubicado en la raíz del árbol de directorios virtuales de una aplicación Web. ASP.NET analiza y compila automáticamente este archivo para producir una clase dinámica de .NET Framework, la cual extiende la clase base HttpApplication (la primera vez que se activa o se solicita cualquier recurso o URL dentro del espacio de nombres de la aplicación). ASP.NET analiza y compila dinámicamente el archivo Global.asax para producir una clase de .NET Framework la primera vez que se activa o se solicita cualquier recurso o URL dentro del espacio de nombres de la aplicación. El archivo Global.asax está configurado para rechazar automáticamente cualquier solicitud de URL directa de modo que los usuarios externos no puedan descargar o ver el código interno. Eventos cuyo ámbito es una sesión o una aplicación Los programadores pueden definir controladores para eventos de la clase base HttpApplication creando métodos en el archivo Global.asax que se ajusten al modelo de nomenclatura "NombreDeEventoDeLaAplicación(FirmaDeArgumentosDelEvento)". Por ejemplo: <script language="C#" runat="server"> void Application_Start(object sender, EventArgs e) { // Application startup code goes here 27

} Si el código de control de eventos necesita importar espacios de nombres adicionales, se puede utilizar la directiva @ import en una página .aspx, como se indica a continuación: <%@ Import Namespace="System.Text" %> El siguiente ejemplo ilustra el período de vida de Application, Session y Request. Ver ejemplo Tema3−global La primera vez que se abre la página, se provoca el evento Start para la aplicación y la sesión: void Application_Start(object sender, EventArgs e) { // Application startup code goes here } void Session_Start(object sender, EventArgs e) { Response.Write("Session is Starting...
"); Session.Timeout = 1; } Los eventos BeginRequest y EndRequest se provocan en cada solicitud. Cuando la página se actualiza, sólo aparecen mensajes de BeginRequest, EndRequest y el método Page_Load. Observa que, al abandonar la sesión actual (hacer clic en el botón "Finalizar esta sesión"), se crea una nueva sesión y se provoca de nuevo el evento Session_Start. Sub Application_Start(Sender As Object, E As EventArgs) ' Application startup code goes here End Sub Sub Session_Start(Sender As Object, E As EventArgs) Response.Write("Session is Starting...
") Session.Timeout = 1 End Sub function Application_Start(sender:Object, E:EventArgs) : void { // Application startup code goes here }

28

function Session_Start(sender:Object, e:EventArgs) : void { Response.Write("Session is Starting...
"); Session.Timeout = 1; } EL OBJETO SESSION Debido a que Web es un medio sin estado es difícil llevar un control de la información del usuario. No hay forma de utilizar http para saber si una serie de peticiones proviene de un usuario o de varios. El objeto Session permite almacenar elementos propios de un usuario, como variables, objetos, cadenas...) en un solo lugar del servidor. Al tiempo que un usuario pasa en un sitio se le conoce como sesión. Explicar este código: <%@ Page Language="VB" %> <%@ Page Language="c#" %> <script runat="server"> Sub Enviar_Click(obj as object, e as EventArgs) If tbNombre.Value <> "" Session("Nombre") = tbNombre.Value Response.Write("¡Hola, " & Session("Nombre") & "!") Else Response.Write("Olvidó capturar un nombre.") End if End Sub public void Enviar_Click (Object sender, EventArgs E) { if(tbNombre.Value != "") { Session["Nombre"] = tbNombre.Value ; Response.Write("¡Hola, " + Session["Nombre"] + "!") ;

29

} else { Response.Write("Olvidó escribir un nombre."); } }
Por favor, teclee su nombre:

COMO RECUPERAR VARIABLES DE SESSION <%@ Page Language="VB" %> <script runat="server"> sub Page_Load(obj as object, e as eventArgs) Etiqueta1.Text = "¡Bienvenido de vuelta " & Session("Nombre") & "!" end sub



30

<%@ Page Language="c#" %> <script runat="server"> public void Page_Load(Object obj, EventArgs e) Etiqueta1.Text = "¡Bienvenido de vuelta " + Session["Nombre"] + "!" ; }
Ver ejemplo − tema3\sesion\ejemploSesion ¿Cómo logra asp.net llevar un control de las sesiones? Cuando un usuario visita el sitio e inicia sesión, el equipo genera un identificador único para él que almacena en el equipo cliente en forma de cookie. Response.Write(Session.SessionID) Cuando la sesión expire se eliminará la cookie. CONTROL DE SESSION Timeout: Tiempo que puede estar inactiva una sesión antes que asp.net la deje. 20 minutos es el valor predeterminado. Para modificarlo: Session.Timeout= x donde x es el tiempo en minutos Session.Abandon: hace que la sesión termine. USO DE SESSION Se usa como cualquier matriz. <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as eventArgs)

31

Dim strVariable As String ' Establezco algunas variables de sesión Session("Nombre") = "Tania" Session("ColorFavorito") = "Naranja" Session("ColorOjos") = "Café" Session("UnMensaje") = "Bienvenido a mi mundo." Session("ASPNET") = "¡Es a genial!" For Each strVariable In Session.Contents Label1.Text += "" & strVariable & ": " & _ Session(strVariable) & "
" Next End Sub
<%@ Page Language="C#" %> <script runat="server"> public void Page_Load(object obj, eventArgs e){ string strVariable; ' Establezco algunas variables de sesión Session["Nombre"] = "Tania" Session["ColorFavorito"]= "Naranja" Session["ColorOjos"] = "Café"

32

Session["UnMensaje"] = "Bienvenido a mi mundo." Session["ASPNET"] = "¡Es genial!" foreach (strVariable In Session.Contents){ Label1.Text += "" + strVariable + ": " + Session[strVariable] + "
" } }
Si el usuario no soporta cookies asp.net coloca el identificador de la sesión cifrado en cada vínculo de la página. Es posible almacenar los datos con ámbito de sesión a fin de proporcionar datos individuales a un usuario durante una sesión. En el ejemplo siguiente se inicializan los valores de preferencias de usuario en el evento Session_Start del archivo Global.asax. void Session_Start() { Session["BackColor"] = "beige"; ... } Se modifican los valores de las preferencias de usuario en el controlador de eventos Submit_Click con la información aportada por el usuario. protected void Submit_Click(Object sender, EventArgs e) { Session["BackColor"] = BackColor.Value; ... } Configurar el estado de una sesión: es posible configurar las características del estado de una sesión en la sección de un archivo web.config. Para doblar el tiempo de espera predeterminado de 20 33

minutos, se puede agregar el código siguiente al archivo web.config de una aplicación: Protected GetStyle(key As String) As String Return(Session(key).ToString()) End Sub protected function GetStyle(key:String) : String { return Session(key).ToString(); } Sub Session_Start() Session("BackColor") = "beige" ... End Sub function Session_Start() : void { Session("BackColor") = "beige"; ... } EJERCICIO: Realizar el mismo ejercicio de las cookies pero con variables de sesión. Solución:tema3−sesion−mariansesion1 EL OBJETO HttpApplication Aplicación: Conjunto de archivos que hay en un directorio virtual y sus subdirectorios. ASP.net genera un objeto HttpApplication llamado Application cuando arranca su aplicación, es decir, cuando alguien solicita la página por primera vez. Sólo se genera un objeto Application para toda la aplicación. Al igual que Session puede usarse para almacenar variables y objetos. Por ejemplo un pie de página que vamos a colocar en cada página. Application(pie)=Derechos de autor 2004 Escribiríamos en cada página:

34

Response.Write(Application(pie)) EL OBJETO HttpSeverUtility Podemos utilizar el nombre Server para acceder a los miembros de este objeto. COMO REDIRIGIR A LOS USUARIOS Con el objeto Response. Con los métodos Execute y Transfer del objeto HttpSeverUtility. Server.Transfer lleva la ejecución a otra página. If (strContraseña == micontraseña) Server.Transfer(PuedoEntrar.aspx) Server.Execute lleva la ejecución de asp.net as otra página, pero regresa a la misma cuando termine. Esto es útil si se necesita ejecutar cierto código en otra página (como un procesamiento de datos) pero continuar en la misma página. COMO DAR FORMATO A LAS CADENAS Cuando envíe alguna salida al explorador, será interpretada como HTML. Response.Write (
) Si en lugar de un salto de línea quiero que aparezca
usaré el método HtmlEncode del objeto HttpServerUtility. Esto daría como resultado
y el usuario vería
en el explorador. UrlEncode hace algo similar, pero da formato a una cadena en particular con las reglas URL. Por ejemplo el & y ? tienen un significado especial en un url. Server.HtmlDecode y Server.UrlDecode realizan estas operaciones a la inversa. El método MapPath traduce una ruta virtual en una física en el servidor. Server.MapPath(/asp/tema4) Se traduce en C:\inetpub\wwwroot\asp\tema4 COMO CONTROLAR SECUENCIAS DE COMANDOS Con el método ScriptTimeout indicamos el tiempo que vamos a esperar antes de finalizar la secuencia de comandos. Por ejemplo si escribimos un código con un bucle infinito.... Server.ScriptTimeout=90 (segundos) COMO GENERAR OBJETOS 35

Con el método CreateObject creamos una instancia de un objeto COM. EJERCICIOS: • Generar una página ASP.NET en C# que actúe como inicio de sesión seguro. Permita que el usuario capture un nombre y una contraseña en el cuadro de texto. Si concuerdan con una cadena que indiquemos, redirigiremos al usuario a una página de aceptación, de otro modo, mostramos un error. Si el nombreusuario es válido, guardar en una variable de sesión. • Escribir una página de aceptación. Mostar un mensaje de bienvenida adaptado para el usuario con ayuda del evento Load del objeto Page y un control Label. Indicar al usuario la hora en curso y su identificador de sesión. Verificar la propiedad IsPostback del objeto Page para asegurarse de que este mensaje sólo aparece la primera vez que el usuario llegue a la página. Agregar un botón para que pueda finalizar la sesión, con un mensaje de confirmación. Soluciones: tema3/tema3ej1y2 TEMA 4: INTRODUCCIÓN A LOS FORMULARIOS WEB Permiten un control programático de la interfaz del usuario mediante el uso de objetos residentes en el servidor. PRESENTACIÓN DE LOS FORMULARIOS Un cliente envía una petición a un servidor para obtener cierta información y que éste responda a su envío. Es el modelo petición−respuesta.
Teclea tu nombre
El cliente también puede enviar datos al servidor. Los formularios HTML permiten la interacción del usuario con páginas web. Cuando el usuario hace clic en el botón Enviar, el formulario envía al servidor los datos que haya capturado. Los formularios HTML se basan por completo en el cliente. Entre el cliente y el servidor es difícil intercambiar información. Tan pronto como el servidor envía los datos, olvida todo lo que el formulario indica y pierde el rastro de lo que sucede. PRESENTACIÓN DE LOS FORMULARIOS WEB Son muy similares a los HTML. La diferencia es que se basan en el servidor. Genera los elementos del 36

usuario en el servidor. El servidor tendrá conocimiento de la apariencia de la interfaz, qué puede hacer, qué datos recibirá, etc. En el servidor generaremos objetos llamados controles de servidor, que pueden controlarse por completo: tienen propiedades, eventos y métodos que podemos manejar. Tan pronto como el cliente solicita la página, ASP.NET convierte los controles a HTML. A través de la secuencia de comandos que asp.net genera automáticamente en el cliente, estos controles avisan al servidor cuando algo sucede, como cuando se hace clic en un botón. MODELO DE PROGRAMACIÓN DE LOS FORMULARIOS WEB Los formularios web están divididos en dos partes: los elementos visuales y la lógica de la interfaz. Están separados entre sí en el plano conceptual y en el físico. CONTROLES DE SERVIDOR Los controles ASP .NET son una serie de objetos de servidor que generarán el correspondiente código HTML para que el usuario pueda utilizarlos en la página cargada en su navegador al ejecutarse la página ASP .NET correspondiente los controles de servidor de ASP .NET generarán todo el código equivalente en el lenguaje HTML, para que así pueda ser interpretado el resultado de la ejecución de la página por cualquier navegador Web. Cada control se corresponde con una clase determinada perteneciente a un espacio con nombre determinado. Existe un gran número de controles de servidor y cada uno de ellos pertenece a una clase del .NET Framework. Son los elementos de la interfaz de usuario de un formulario web. Hay cuatro tipos de estos controles en asp.net: controles HTML de servidor, controles web, controles de validación, controles de usuario. Los controles HTML de servidor representan a los elementos normales de los formularios HTML, como los cuadros de texto y los botones, pero se crean en el servidor donde podemos controlarlos. Los controles web son semejantes, pero ofrecen una mayor funcinalidad y pueden representar interfaces de usuario más complejas. Los controles de validación se utilizan para validar lo capturado por el usuario. Los controles de usuario son aquellos programados a medida para realizar cierta funcionalidad. Todos tienen propiedades, métodos y eventos. EVENTOS DE LOS CONTROLES DE SERVIDOR

37

Hacer clic en un botón, en un vínculo, llenar un cuadro de texto, seleccionar un elemento de una lista.... Un evento activo necesita una acción explícita del usuario. Un evento pasivo se puede ejecutar sin intención directa del usuario, como mover el cursor por una imagen. Sólo los eventos activos se manejan en el servidor. Hay dos formas de enviar los eventos al servidor: conforme ocurren o todos juntos en un solo envío. Es conveniente utilizar el segundo método. Permanecen en la caché del usuario hasta que éste se decida a enviar los datos. Los controles generan eventos automáticamente siempre que sucede algo. Para controlar el evento en el servidor, necesitará indicar al control qué método utilizar. <%@ Page Language="VB" %> <script runat="server"> Sub Button1_Click(obj as object, e as EventArgs) Label1.Text="Hizo clic en " & obj.Text & "" Esta línea establece la propiedad Text del control Label1. Esta línea da el mismo resutado: Label1.Text="Hizo clic en " & Button1.Text & "" End Sub Tema 4

<%@ Page Language="c#" %>

38

<script runat="server"> public void Button1_Click(Object obj, EventArgs e) { Label1.Text="Hizo clic en " + ((Button)obj).Text + ""; } Tema 4


Ver tema4−tm4ejemplo1.aspx Si especificamos en el controlador del servidor que un método deberá controlar un evento: Si no genero este método en alguna parte del bloque de declaración de código, recibiré un error. COMO ENVIAR FORMULARIOS WEB Una situación típica, cuando la página se cargue en el explorador, mostramos un mensaje de bienvenida en un control de servidor. Este mensaje formará parte del estado visual del control y asp.net lo recordará siempre. El objeto Page tiene una propiedad llamada IsPostBack que informa si el formulario ya ha sido o no enviado. Se puede verificar esta propiedad y decidir si se llena o no con los controles de servidor. Ejemplo: <%@ Page Language="VB" %> <script runat="server">

39

Sub Page_Load(obj as object, e as EventArgs) If Not Page.IsPostBack Then lblMensaje.Text = "¡Hola, mundo!" End If End Sub Evalúa la propiedad IsPostBack, y si es verdadera(el formulario ha sido enviado) no ejecuta la siguiente línea. Asp.net llenará la etiqueta por ti cada vez que el formulario se envía. Sub Enviar(obj as object, e as EventArgs) lblMensaje2.Text = "Formulario enviado." End Sub

<%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) { if (!Page.IsPostBack) { 40

lblMensaje.Text = "¡Hola, mundo!"; } } Evalúa la propiedad IsPostBack, y si es verdadera (el formulario ha sido enviado) no ejecuta la siguiente línea. Asp.net llenará la etiqueta por ti cada vez que el formulario se envía. public void Enviar (Object sender, EventArgs E) { lblMensaje2.Text = "Formulario enviado."; }

Ver tema4−tm4ejemplo2.aspx COMO GUARDAR EL ESTADO Los formularios web guardan el estado visual de cada control en el formulario mediante campos ocultos. Este estado visual le indica lo que se ha tecleado en el control, ya sea que éste se encuentre o no seleccionado, qué elemento lo está, etc Hay otra forma de guardar información en los formularios web. Utilizar el saco de estado o state bag, un objeto que contiene los valores cuando se envía un formulario. Cuando coloca algo en el saco de estado y envías el formulario, el servidor guarda la información y la devuelve al cliente cuando finaliza su proceso. Es una forma sencilla de almacenar información personalizada que un usuario no haya tecleado, por ejemplo un cálculo. Se accede al saco de estado mediante la variable ViewState. Ejemplo: Guardar la hora en curso en el saco de estado tan pronto como se carga la página. Cuando el usuario 41

hace clic en el botón Enviar, se compara la hora de inicio con la nueva hora. <%@ Page Language="VB" %> <script runat="server"> Sub Page_Load(obj as object, e as EventArgs) If Not Page.IsPostBack then ViewState("HoraInicio") = DateTime.Now lblMensaje.Text = "Ahora son: " & _ ViewState("HoraInicio") End If End Sub Como se necesita almacenar la hora la primera vez que se accede a la página, tenemos que verificar la propiedad IsPostBack. Si es el primer acceso almacenamos la hora en la variable ViewState. Sub Enviar(obj as object, e as EventArgs) lblMensaje.Text = "Ahora son: " & _ DateTime.Now & "
iniciado a las: " & _ ViewState("HoraInicio") End Sub Aprendiendo ASP.NET


42

<%@ Page Language="c#" %> <script runat="server"> public void Page_Load (Object sender, EventArgs E) { if (!Page.IsPostBack) { ViewState["HoraInicio"] = DateTime.Now; lblMensaje.Text = "Ahora son: " + ViewState["HoraInicio"]; } } Como se necesita almacenar la hora la primera vez que se accede a la página, tenemos que verificar la propiedad IsPostBack. Si es el primer acceso almacenamos la hora en la variable ViewState. public void Enviar(Object sender, EventArgs E) { lblMensaje.Text = "Ahora son: " + DateTime.Now + "
iniciado a las: " + ViewState["HoraInicio"]; } Aprendiendo ASP.NET


43

(ver tema4−estado) EJERCICIO:

44

45

46

Solución: tema−saco−prueba3 ORDEN DE PROCESAMIENTO DE LOS FORMULARIOS WEB 1 La página se solicita (o envía) 2 Se restaura el estado visual de los controles 3 Ocurre el evento Page_Load 4 Los eventos se controlan, se ejecutan los métodos que controlan eventos. 5 Ocurre el evento Page_Unload CONTOLES HTML DE SERVIDOR Los controles HTML ofrecen a los desarrolladores de entornos Web la potencia de los Web Forms 47

manteniendo la familiaridad y facilidad de uso de las etiquetas HTML que representan los campos de un formulario. Estos controles tienen el mismo aspecto que una etiqueta HTML a excepción de que presentan el atributo runat con el valor server. Si queremos realizar el tratamiento de eventos con código del servidor, utilizaremos el atributo onserverevento, a este atributo se le indica como valor el nombre del método que queremos ejecutar. Los elementos HTML están totalmente basados en el cliente. Un explorador conoce el aspecto y funcionamiento de y lo interpreta de acuerdo con eso. Los controles HTML de servidor son elementos u objetos que se crean en éste, con propiedades, métodos y eventos que podemos controlar. Son muy fáciles de generar: sólo hay que agregar el atributo runat=server a cualquier elemento HTML. Todos estos controles pertenecen al espacio de nombres System.Web.UI.HtmlControls. <%@ Page Language="VB" %> <script runat="server"> Sub Clic(obj as object, e as EventArgs) select case obj.Value case "Izquierda" word_image.align = "left" case "Derecha" word_image.align = "right" case "Centro" word_image.align = "center" end select Aquí establezco el estilo de los botones. Quiero que el botón que fue oprimido aparezca sumido. Por eso hay que sacar el resto con el valor notset. Izquierda.Style("Border−Style") = "notset" Derecha.Style("Border−Style") = "notset" Centro.Style("Border−Style") = "notset" Establezco a inset la propiedad del botón representado por obj.

48

obj.Style("Border−Style") = "inset" end Sub Aquí tenemos 6 elementos HTML: un formulario, tres botones, una imagen y una sección

. Los controles HtmlInputButton (botones) tienen un evento llamado ServerClick, que sucede cuando se oprimen. Aprendiendo ASP.NET:

Éste es un texto de ejemplo. Cuando los botones de arriba se opriman, la imagen se moverá por el texto para acomodarse en la posición elegida.

Este ejemplo demuestra los controles HtmlImage y HtmlInputButton.

Ver ejercicios/tema4/caritavb/prueba4vb.aspx EJERCICIO Realizar ese mismo ejercicio con C#. Solución: ejercicios/tema4/caritaCsharp HtmlAnchor :

49

Esta clase se corresponde con la etiqueta , es decir, es el control HTML que nos permite manejar enlaces. El elemento HTML permite crear un hipervínculo para desplazarse a otra ubicación de la página o a otra página Web. HmlButton : Este control HTML generará la etiqueta

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.