Introducción a ASP.NET

Anuncio
INTRODUCCIÓN A ASP.NET
TGP2006
Rafael Cano Parra
[email protected]
12 de enero de 2007
Tecnología de la Programación
Ingeniería Técnica en Informática de Gestión
Universidad de Valladolid
ÍNDICE GENERAL
1.
INTRODUCCIÓN A ASP.NET.......................................................................... 3
1.1. Procesamiento dinámico........................................................................... 3
1.2. Enlace de los elementos ........................................................................... 3
1.3. Elementos de una página ASP.NET ......................................................... 3
2.
CREACIÓN GENERAL DE PÁGINAS ............................................................. 5
2.1. Bloques de declaración de código ............................................................ 5
2.2. Flujo de página ......................................................................................... 5
2.3. Estado visual............................................................................................. 6
2.4. Cómo debemos escribir código de ASP.NET y HTML .............................. 6
2.5. Comentarios en el código ......................................................................... 6
2.6. División del código en varias líneas .......................................................... 6
2.7. Cómo importar espacios de nombres ....................................................... 6
3.
USO BÁSICO DE OBJETOS ........................................................................... 7
3.1. Objeto Response ...................................................................................... 7
3.2. Objeto Request ......................................................................................... 7
3.3. Objeto HttpCookie..................................................................................... 7
3.4. Objeto Page .............................................................................................. 8
3.5. Objeto Session.......................................................................................... 8
3.6. Objeto HttpApplication .............................................................................. 9
3.7. Objeto HttpServerUtility............................................................................. 9
4.
INTRODUCCIÓN A FORMULARIOS WEB.................................................... 10
4.1. Presentación de los formularios .............................................................. 10
4.2. Presentación de formularios web ............................................................ 10
4.3. Modelo de programación de los formularios web.................................... 10
5.
INCLUSIÓN DE ARCHIVOS EXTERNOS DESDE EL SERVIDOR ............... 16
6.
BIBLIOGRAFÍA Y REFERENCIAS ................................................................ 17
2
1. INTRODUCCIÓN A ASP.NET
1.1.
PROCESAMIENTO DINÁMICO:
Internet está basado en un modelo cliente-servidor, en el que se realizan una serie de
peticiones por el cliente las cuales son respondidas por el servidor. Por ello, tenemos un equipo
que contiene información al que se le denomina servidor, y también tenemos otro equipo que la
solicita al cual se le denomina cliente.
El modelo cliente-servidor puede ser:
•
Estático: el servidor no puede proporcionar información de forma dinámica o procesar
los datos para devolver la información. Esto ocurre con el lenguaje HTML.
•
Dinámico: el servidor proporciona la información dinámicamente y analiza dicha
información antes de enviarla al cliente. Esto ocurre con el lenguaje ASP.
•
Controlado por eventos: el servidor espera a que algo ocurra en el cliente para entrar en
acción y ejecutar alguna tarea. Esto ocurre con el lenguaje ASP.NET.
Por tanto, ASP.NET es un lenguaje el cual sigue un modelo controlado por eventos. Éste sabe
lo que ocurre en el cliente porque se basa en el procesamiento dentro del cliente para simular un
modelo controlado por eventos, como puede ser por ejemplo cualquier otra aplicación hecha en
Visual Basic.
1.2.
ENLACE DE LOS ELEMENTOS:
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í, como
veremos a continuación:
•
Ejecución en el cliente: no se procesa en el servidor, sino que 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.
•
Ejecución en el servidor: se ejecuta sólo en el servidor y todo se convierte en HTML o
XML antes de enviarlo al cliente. Se utiliza para procesar resultados y devolver datos.
En el caso específico de ASP.NET, éste sabe lo que ocurre en el cliente porque éste se
comunica con el servidor mediante una petición. La forma en la que enlaza los elementos del
cliente con el servidor es a través de secuencias de comandos en el cliente, y que proporciona
información de lo que éste hace durante las peticiones al servidor.
Otra cualidad de ASP.NET es que, tras una petición de información de una página, el servidor
compila esta para tener una aplicación más eficiente. La compilación se ejecuta la primera vez y
ser reutiliza para posteriores peticiones de página.
1.3.
ELEMENTOS DE UNA PÁGINA ASP.NET:
Un archivo sencillo que puede ser encontrado en la carpeta raíz del servidor web con la
extensión *.aspx para identificarle como ASP.NET, es el siguiente:
<%@ Page Language="VB" %>
<html>
<head>
<title>Página en ASP.NET</title>
<script runat="server">
Sub Page_Load(obj as object, e as eventargs)
lblMensaje.Text = "¡Bienvenido a ASP.NET!"
3
End sub
</script>
</head>
<body>
<asp:Label id="lblMensaje" runat="server" />
</body>
</html>
En el ejemplo anterior podemos encontrar los siguientes elementos:
•
Primero tenemos la etiqueta <%@ Page Language="VB" %> que identifica la directiva de
página y es la que da la información específica a la página ASP.NET. Esta es la que
nos dice que el lenguaje usado es Visual Basic, ya que se pueden usar más lenguajes,
como C# o JScript.
•
Todo el trozo que engloba la etiqueta <script runat="server"> hasta su cierre es el
bloque de declaración de código. Se parece al código que es ejecutado en el lado del
cliente, pero se diferencia por la variable runat="server", que también es utilizada en
otro tipo de elementos HTML que veremos más adelante. Éste es el código que
ASP.NET utiliza para procesar sus páginas y es donde controlaremos la funcionalidad
de la misma. Este trozo normalmente se coloca en el <head>, aunque se puede utilizar
en otras partes del código.
•
Luego están los elementos típicos de una página HTML, como son las etiquetas
<html>, <head> y <body>. Dentro de ellas es donde va todo el código de la página que
va a ser visualizado por en navegador.
•
Finalmente, entre el <body> podemos tener varios elementos de control de ASP.NET,
así como otras funcionalidades de ASP. Ejemplo de esto es la línea <asp:Label
id="lblMensaje" runat="server" /> que es parte de un formulario web, muy típico
en el nuevo contexto de ASP.NET, y que suele ir encerrado entre el trozo de las
etiquetas <form runat="server">, similares a las de HTML pero que son controladas
por ASP.NET.
Aunque ASP y ASP.NET sean totalmente distintos, pueden operar en conjunto, ya que el
servidor web procesa ambas tecnologías. Podemos tener trozos de código entre <% y %> propios de
ASP, pero se ha de tener en cuenta que estos trozos no son compilados por .NET y la aplicación
puede perder la eficiencia que se consigue con el nuevo ASP.NET.
4
2. CREACIÓN GENERAL DE PÁGINAS
2.1.
BLOQUES DE DECLARACIÓN DE CÓDIGO:
Una declaración de código para Visual Basic sería:
<%@ Page Language="VB" Debug="True" %>
<script runat="server">
Sub tbMensaje_Change(Sender As Object, E As EventArgs)
lblMensaje.Text = "Hola, " + tbMensaje.Text + "."
End Sub
</script>
El mismo código escrito en C# es el siguiente:
<%@ Page Language="c#" Debug="True" %>
<script runat="server">
public void tbMensaje_Change (Object sender, EventArgs E) {
lblMensaje.Text = "Hola, " + tbMensaje.Text + ".";
}
</script>
Los eventos que controlarán ese trozo de código y de los cuales veremos más adelante su
descripción, serán los del siguiente formulario web:
<form runat="server">
<p>Por favor, teclea tu nombre:</p>
<asp:textbox id="tbMensaje" OnTextChanged="tbMensaje_Change" runat="server" />
<asp:button id="btSubmit" Text="Enviar" runat="server" />
<asp:label id="lblMensaje" font-size="20pt" runat="server" />
</form>
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 nunca incluir runat="server", ya que sino ASP.NET no lo interpretará como código
para la aplicación dinámica.
Podemos ver que la diferencia entre ambos es la sintaxis, ya que el control de eventos se hace de la
misma forma, sea el lenguaje que sea. En los formularios web, servicios web,… que contiene la página
HTML no influye el lenguaje utilizado, ya que los eventos se identifican del mismo modo.
Es mejor separar el bloque <script> tanto como sea posible del código de presentación en HTML,
por ello es recomendable escribirlo en la cabecera de la página.
En cuanto al trozo del formulario web, comentar que no tiene acción asociada ya que se refiere a la
misma página. La etiqueta <asp:textbox /> como las otras son los controles de servidor y siempre han
de contener el cierre de etiqueta para que no genere errores. El atributo id es un nombre único que
damos al control para su identificación. 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.
2.2.
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
5
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.
2.3.
ESTADO VISUAL:
Describe el aspecto de un objeto en un momento determinado, como por ejemplo, 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 la 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.
2.4.
CÓMO DEBEMOS 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 otras formas de escribir HTML
puro mediante ASP.NET, como son Response.Write o la etiqueta <%=, ambos heredados de ASP.
Pero lo más correcto es separar el código ASP.NET del HTML tanto como podamos mediante
bloques de declaración de código. Por ello 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.
2.5.
COMENTARIOS EN EL CÓDIGO:
Hay cuatro formas de comentar el código dependiendo del lenguaje usado:
2.6.
•
<!-- y --> para comentar código sólo en HTML.
•
' (apóstrofo) para comentar con código en Visual Basic.
•
// y /* … */ para comentar código en C#.
•
<%-- y --%> para comentarios del servidor.
DIVISIÓN DEL CÓDIGO EN VARIAS LÍNEAS:
Esto es propio del lenguaje Visual Basic, ya que C# hasta que no encuentra un punto y coma no
cierra la línea. La forma de hacerlo es con la barra baja, como vemos en el siguiente ejemplo:
<% Response.Write ("Te estoy "
"saludando") %>
2.7.
& _
CÓMO IMPORTAR ESPACIOS DE NOMBRES:
De forma predeterminada, se importan automáticamente los siguientes espacios de nombre a todas
las páginas ASP.NET: System, System.Collections, System.IO, System.Web, System.Web.IU,
System.Web.IU.HtmlControls y System.Web.IU.WebConstrols.
En el caso de que nos haga falta otra cualquiera, como por ejemplo el espacio System.Drawing, se
haría de la siguiente forma:
<%@ Import Namespace="System.Drawing" %>
6
3. USO BÁSICO DE OBJETOS
En los siguientes puntos veremos los objetos que están implementados en ASP.NET, junto con una
descripción de su utilización y los métodos que pueden usarse con ellos. Se puede buscar y ampliar más
información sobre estos en cualquier libro o página de Internet.
3.1.
OBJETO Response:
El objeto Response permite la interacción del servidor con el cliente.
Cuando un usuario solicita una página ASP.NET genera una instancia 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.
Los métodos de los que consta son los siguientes:
3.2.
•
Para escribir en pantalla: Write.
•
Para controlar el buffer: Buffer, junto con Clear, Flush y End.
•
Para redirigir a otras páginas: Redirect.
OBJETO Request:
Una función del objeto Request es obtener información 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 de cómo
máximo 255 caracteres.
Los métodos que recogen estos datos son:
•
QueryString y QueryString(“variable”) obtiene todas las variables o una variable concreta de la
ruta de acceso a la página.
•
Form y Form(“nombre”) devuelve todos los valores o el valor concreto de los controles de un
formulario.
•
ServerVariables devuelve información sobre el servidor, como la IP o el protocolo.
•
Cookies devuelve información sobre las cookies utilizadas en la aplicación.
Variables del servidor que pueden ser utilizadas son: URL o PATH_INFO (obtiene el nombre de la
página actual), PATH_TRANSLATED (obtiene toda la ruta física del servidor), SERVER_NAME (obtiene
el nombre del servidor web) y SERVER_SOFTWARE (obtiene el nombre del software del servidor web).
3.3.
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.
Métodos que son usados por este objeto son:
•
Value para dar un valor en particular a una cookie.
•
Expires para darlas un tiempo concreto de duracion (con una fecha). Esto se usa para eliminar
una cookie, si damos una fecha anterior o la ponemos a cero.
•
Domain restringe el uso de la cookie para el dominio que le indiquemos.
•
Path sólo 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.
7
•
3.4.
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.
OBJETO Page:
Contiene todas las propiedades y métodos que genere la página ASP.NET. Cuando ejecutamos una
página ASP.NET ésta heredará de la clase Page del .NET Framework.
Las páginas ASP.NET son los objetos secundarios del objeto Page. Cualquier método o propiedad
que se 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:
•
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.
Eventos que son producidos:
•
Init: 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 y 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.
Propiedades que son utilizadas en el método son:
3.5.
•
IsPostBack: esta propiedad de la clase Boolean 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 es la primera
vez que se carga la página y nos servirá de indicador para poder inicializar los controles web 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.
OBJETO Session:
Debido a que la web es un medio sin estado, es difícil llevar un control de la información del usuario.
No hay forma de utilizar el protocolo 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. Por eso se conoce como sesión al tiempo que un
usuario pasa en un sitio, y se la suele identificar con un nombre y un valor.
El control de las sesiones se hace con los siguientes métodos:
•
Timeout es el tiempo que puede estar inactiva una sesión antes que ASP.NET la deje. El
tiempo predeterminado es de 20 minutos, pero se puede modificar dándole otro valor.
•
Abandon: hace que la sesión termine.
8
Es posible almacenar los datos con ámbito de sesión a fin de proporcionar datos individuales a un
usuario durante una sesión. Además es posible configurar las características del estado de una sesión en
la sección <sessionState> del archivo web.config del servidor web de ASP.NET.
3.6.
OBJETO HttpApplication:
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, como por ejemplo un
pie de página que vamos a colocar en cada página.
3.7.
OBJETO HttpServerUtility:
Podemos utilizar el nombre Server para acceder a los métodos de este objeto.
Los métodos que pueden ser usados por este objeto son:
•
Transfer: lleva la ejecución a otra página.
•
Execute: lleva la ejecución a otra página, pero regresa a la misma cuando termine.
•
HtmlEncode: se utiliza para que la salida de un texto no sea interpretada por HTML, por lo que
codifica los caracteres especiales. Su operación inversa es HtmlDecode.
•
UrlEncode: hace algo similar ya que da formato a una cadena en particular con las reglas
URL. Su operación inversa es UrlDecode.
•
MapPath: traduce una ruta virtual en una física en el servidor.
•
ScriptTimeout: indicamos el tiempo que vamos a esperar en segundos antes de finalizar la
secuencia de comandos, como puede ocurrir si tenemos un bucle infinito.
•
CreateObject: creamos una instancia de un objeto COM.
9
4. INTRODUCCIÓN A FORMULARIOS WEB
4.1.
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. Un ejemplo de formulario puede ser:
<form method ="post">
<p>Teclea tu nombre:</p>
<input type="text" size="20" />
<input type="submit" value="Enviar" />
</form>
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.
4.2.
PRESENTACIÓN DE FORMULARIOS WEB:
Son muy similares a los de HTML. La diferencia es que se basan en el servidor, es decir, genera los
elementos del usuario en el servidor. El servidor tendrá conocimiento de la apariencia de la interfaz, qué
puede hacer, qué datos recibirá,…
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.
4.3.
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.
4.3.1.
Controles de servidor:
Al ejecutarse una página ASP.NET, la serie de objetos de los controles de servidor generarán todo
el código equivalente en el lenguaje HTML de esta página para que su resultado pueda ser interpretado
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. Estos controles son los elementos de la interfaz de usuario de un formulario web.
Hay cuatro tipos y todos tienen propiedades, métodos y eventos.
La descripción de cada uno de ellos es la siguiente:
•
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.
•
Controles web: son semejantes, pero ofrecen una mayor funcinalidad y pueden representar
interfaces de usuario más complejas.
•
Controles de validación: se utilizan para validar lo capturado por el usuario.
•
Controles de usuario: son aquellos programados a medida para realizar cierta funcionalidad.
10
4.3.2.
Eventos de controles de servidor:
Cuando hacemos clic en un botón, en un vínculo, llenamos un cuadro de texto, seleccionamos un
elemento de una lista,… y este está asociado a un control, generará uno o varios eventos
automáticamente, ya que ha sucedido algo que él controla. Para controlar el evento en el servidor,
necesitará indicar al control qué método utilizar.
Hay dos clases de eventos: el evento activo que necesita una acción explícita del usuario, y el
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.
Tenemos 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.
Un ejemplo de un formulario web que utiliza controles de servidor es el siguiente:
<%@ Page Language="VB" %>
<script runat="server">
Sub btnEnviar_Click(obj as object, e as EventArgs)
lblMensaje.Text="Hizo clic en <b>" & obj.Text & "</b>"
End Sub
</script>
<html>
<body>
<form runat="server">
<asp:Label id="lblMensaje" runat="server" />
<asp:Button id="btnEnviar" runat="server" text="Enviar" _
onClick="btnEnviar_Click" />
</form>
</body>
</html>
En el ejemplo anterior, tenemos especificado en el controlador de servicio Button1 un método que
deberá controlar un evento, el cual es Button1_Click. Si no genero este método en alguna parte del
bloque de declaración de código, recibiré un error.
4.3.3.
Cómo enviar formularios web:
Una situación típica es que una página que se carga en el explorador muestre 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. Con él se puede verificar esta propiedad y decidir si se llena o no con los
controles de servidor.
Un ejemplo de este uso es con el siguiente código:
<%@ Page Language="VB" %>
<script runat="server">
Sub Page_Load(obj as object, e as EventArgs)
If Not Page.IsPostBack Then
lblMensaje.Text = "¡Hola, mundo!"
End If
End Sub
Sub btnEnviar_Click(obj as object, e as EventArgs)
lblMensaje.Text = "Formulario enviado."
End Sub
</script>
Si tomamos el formulario web de la sección anterior, veremos que la primera vez que entremos en la
página nos escribirá en la etiqueta lblMensaje el mensaje de bienvenida, y además, cada vez que
pulsemos el botón de enviar nos rellenará la etiqueta con el mensaje de “Formulario enviado.”.
4.3.4.
Cómo guardar el estado:
11
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á,…
Hay otra forma de guardar información en los formularios web, que es utilizando el saco de estado o
“state bag”, un objeto que contiene los valores cuando se envía un formulario. Si se coloca algo en el
saco de estado y se envía 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.
Un ejemplo puede ser el de guardar la hora actual en el saco de estado tan pronto como se carga la
página, para luego poder ser mostrada tras dar en el botón “Enviar” de un formulario web.
4.3.5.
Orden de procesamiento de formularios web:
Los pasos que se siguen ante una petición a una página ASP.NET es el siguiente:
4.3.6.
•
La página se solicita del servidor web o se envía desde este.
•
Se restaura el estado visual de los controles.
•
Ocurre el evento Page_Load y se llama a la función correspondiente si existe.
•
Se controlan los eventos y se llaman a los métodos que controlan estos eventos, en el caso
de que sucedan.
•
Ocurre el evento Page_Unload y se llama a la función correspondiente si existe.
Controles HTML de servidor:
Los controles HTML ofrecen a los desarrolladores de entornos web la potencia de los formularios
web o “web forms”, pero 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 OnServer seguido del evento, como por ejemplo OnServerClick, al cual
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 <input type="text" /> 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.
Unos ejemplos de estos controles HTML pueden ser:
<input type="Button" id="Centro" runat="server" value="Centro" OnServerClick="Click" />
<img src="foto.jpg" id="Imagen" runat="server" />
<div id="Cuerpo" runat="server"></div>
Todos estos controles pertenecen al espacio de nombres System.Web.UI.HtmlControls. A
continuación veremos cada uno de los controles que pueden ser aplicados a los elementos en HTML y a
las clases a las que corresponden, y son los siguientes:
•
HtmlAnchor: esta clase se corresponde con la etiqueta <a> que es la que nos permite crear
un hipervínculo para desplazarse a otra ubicación de la página o a otra página web.
•
HtmlButton: este control HTML generará la etiqueta <button> de HTML y se utilizará cuando
sea necesario personalizar al máximo el aspecto de un botón. Permite incluir texto con
formato, imágenes u otros controles de formularios web.
•
HtmlForm: esta clase representa a la etiqueta <form> en el servidor, y es la que nos permite
definir un formulario web que va a realizar la labor de contenedor para una serie de controles
de servidor dentro de la página ASP.NET. Todos los controles ASP.NET que deseemos enviar
al servidor (post) debemos incluirlos dentro de un control de la clase HtmlForm.
12
4.3.7.
•
HtmlGenericControl: esta clase se utilizará para representar las etiquetas HTML que no
poseen una correspondencia directa con las clases del .NET Framework, como puede
suceder con las etiquetas <span>, <div> o <body>, entre otras.
•
HtmlImage: esta clase permite utilizar la etiqueta <img> de HTML en el servidor, por lo que
vamos a ser capaces de manejar imágenes.
•
HtmlInputCheckBox: se corresponde con la etiqueta <input type="checkbox" />, y gracias
a él tenemos acceso en el servidor a este tipo de elemento. Para determinar si se selecciona
el control, se ha de utilizar la propiedad checked.
•
HtmlInputRadioButton: el control HTML que es instancia de esta clase generará en el cliente
una etiqueta <input type="radio" />, permitiendo al código de servidor interactuar con
este elemento. No tiene funcionalidad integrada para mostrar un título para el botón de opción.
Para determinar si el control HtmlInputRadioButton está seleccionado, se ha de mirar con la
propiedad checked.
•
HtmlInputText: se corresponde con las etiquetas <input type="text" /> e <input
type="password" />. El tipo de caja de texto que se genera viene dado por el valor de la
propiedad type.
•
HtmlSelect: Este control HTML se corresponde con una lista desplegable del lenguaje HTML,
es decir, con una etiqueta <select>.
•
HtmlTable: este control se corresponde con una tabla del lenguaje HTML, es decir, permite el
acceso desde el código de servidor a una etiqueta <table>. Esta clase posee una colección
llamada Rows, que contiene objetos de la clase HtmlTableRow. Las propiedades que se
pueden emplear son: Border para especificar el ancho del borde (en píxeles), BgColor para
obtener o establecer el color de fondo, CellPadding para obtener o establecer la cantidad de
espacio entre el contenido de una celda y el borde de la misma, y CellSpacing para obtener o
establecer la cantidad de espacio (en píxeles) entre las celdas adyacentes.
•
HtmlTableRow: clase relacionada con la anterior y que es el control HTML que permite
manipular una fila de una tabla. Esta clase posee una colección llamada Cells, que contiene
objetos de la clase HtmlTableCell.
•
HtmlTableCell: clase que permite el acceso a las celdas de una tabla, es decir, se
corresponde con las etiquetas <td> y <th>.
Controles web de servidor:
Los controles web ofrecen un mayor nivel de abstracción que los controles HTML, y su modelo de
objetos no refleja la sintaxis HTML necesariamente. Cuando la página se carga en el navegador, el
control web determina el tipo de navegador que ha realizado la petición, y de acuerdo con esta
información genera el código HTML apropiado. Podemos decir que en este aspecto se trata de controles
inteligentes.
Son similares a los controles HTML de servidor. Se generan en el servidor y permiten crear
interfaces de usuario complejas con facilidad. Necesitan el atributo runat="server", no es necesario que
se relacionen con elementos HTML y pueden representar elementos más complejos de la interfaz de
usuario.
Para crear un control web, se utiliza la siguiente sintaxis:
<asp:Control id="nombre" runat="server" />
<asp:RadioButtonList id="rblEdad" runat="server"> … </asp:RadioButtonList>
La clase de base System.Web.UI.WebControls.WebControl contiene todas las propiedades
comunes. La mayoría de los controles web de servidor derivan de esta clase.
Los controles web básicos proporcionan la misma funcionalidad que sus correspondientes controles
HTML de servidor, pero además incluyen métodos, eventos y propiedades adicionales que se puede usar
para programar.
Los controles web se pueden clasificar en cuatro tipos: controles web intrínsecos (que son los
equivalentes a los controles HTML), controles web de lista, controles web ricos y controles web de
13
validación. Los beneficios que se desprenden de utilizar controles web intrínsecos sobre los controles
HTML vistos anteriormente son los siguientes:
•
Se ofrece una convención de nomenclatura para controles similares.
•
Existen propiedades comunes para todos los controles, ofreciéndose un modelo de objetos
más robusto.
•
Se incluyen propiedades específicas de los controles.
•
Se genera código HTML específico para cada navegador web.
La similitud con los controles HTML es que para permitir hacer referencia a los controles dentro del
código fuente de la página, se debe utilizar el atributo id. Las diferencias con estos las tenemos en: la
declaración de los controles, algunos nombres de las propiedades cambian y que en los métodos para el
tratamiento de eventos de la pulsación de un botón del ratón en los controles HTML utilizamos la
propiedad OnServerClick, mientras que en los controles web utilizamos la propiedad OnClick.
En los siguientes puntos nos vamos a referir a los diferentes controles web de servidor que pueden
ser empleados, junto con la explicación de utilización. Estos son los siguientes:
•
Button: este control web representa un botón y se corresponde con la etiqueta <input
type="submit" />, es decir, un botón que envía el contenido de un formulario al servidor.
Esta clase se corresponde con el control web <asp:Button>.
•
CheckBox: es el control web que se corresponde con la etiqueta <input type="checkbox"
/> del lenguaje HTML. La propiedad AutoPostBack establece un valor que indica si el estado
del control CheckBox se devuelve automáticamente al servidor cuando se hace clic en él.
•
CheckBoxList: este control permite utilizar una lista de selección múltiple de elementos
CheckBox. Este objeto posee una colección Items que contiene todos los objetos CheckBox.
Se puede especificar la distribución de los CheckBox en la página a través de las propiedades
RepeatDirection y RepeatLayout.
•
DropDownList: este control web representa una lista desplegable, y se corresponde con la
etiqueta <select> de HTML. Cada uno de los elementos del control DropDownList se indica
con un objeto de la clase ListItem.
•
HyperLink: este otro control web representa un enlace en la página, por lo tanto generará en
el cliente una etiqueta <a>.
•
Image: control web que representa una imagen dentro de una página ASP.NET, y que
generará como resultado de su ejecución una etiqueta <img> de HTML. Para indicar la imagen
que deseamos mostrar se utilizará la propiedad ImageURL.
•
ImageButton: este control es muy similar al anterior, pero además de mostrar una imagen
posee la característica adicional de funcionar como un botón de tipo submit, es decir, al pulsar
el botón se envían los contenidos del formulario al servidor. Este control genera en el cliente la
etiqueta HTML <input type="image">.
•
LinkButton: este control va a representar un botón que presenta un estilo similar a los enlaces.
El control LinkButton presenta una apariencia similar a un control HyperLink, pero sin embargo
ofrece la misma funcionalidad que un control Button, es decir, presenta un texto a modo de
enlace que al pulsarlo enviará el formulario en el que se encuentre al servidor.
•
ListBox: este nuevo control web representa una lista de selección sencilla o múltiple que se
corresponde con una etiqueta <select> en el código HTML. Es similar al control
DropDownList, pero en este caso se muestran varios elementos de la lista y se permite la
selección múltiple. Métodos que se pueden emplear son: Rows con el que indicamos el
número de filas visibles, y SelectionMode con el que indicamos si se permite la selección
múltiple, mediante el valor Multiple, o bien la selección simple mediante el valor Single.
•
Panel: este otro control web intrínseco se utiliza para agrupar controles y realizar la función de
contenedor de los mismos. El control Panel posee una propiedad llamada Controls que es una
colección que contiene todos los controles incluidos dentro del objeto Panel.
•
PlaceHolder: control web que realiza también la función de un contenedor de controles web,
pero en este caso no genera ningún código HTML, Se utiliza para añadir controles web de
14
forma dinámica en la página ASP.NET en un punto determinado, y para ello se utiliza su
propiedad Controls.
•
RadioButton: este control representa un botón de opción que se corresponde con el elemento
<input type="radio" /> de HTML. Muestra la misma funcionalidad, es decir, permite
seleccionar una opción dentro de un mismo grupo de opciones. Las opciones se agrupan
mediante la propiedad GroupName.
•
RadioButtonList: este control permite utilizar una lista de selección múltiple de controles
RadioButton. Este objeto posee una colección Items que contiene todos los objetos
RadioButton. Se puede especificar a través de las propiedades RepeatDirection y
RepeatLayout la distribución de los RadioButton en la página. Como se puede apreciar es
muy similar al control CheckBoxList, pero en este caso se utilizan controles RadioButton.
•
Table, TableRow y TableCell: estos controles web se encuentran muy relacionados entre sí y
mediante la utilización de todos ellos podremos generar tablas en HTML. El control web Table
se corresponde con una tabla del lenguaje HTML, es decir, permite generar tablas del
lenguaje HTML. Esta clase posee una colección llamada Rows, que contiene objetos de la
clase TableRow.
Los controles web ofrecen un completo soporte para las hojas de estilo, es decir, podemos aplicar
los estilos de forma similar a como lo hacemos en HTML para personalizar el aspecto de nuestros
controles.
Existen tres formas para aplicar estos estilos:
4.3.8.
•
Mediante propiedades específicas de cada control, similar al uso en HTML.
•
Mediante la propiedad CssClass, que accede a una clase del la lista de estilos CSS.
•
Mediante la propiedad Style, que es una colección que nos permite asignar valores a las
distintas propiedades del estilo del control.
Cómo enviar datos inmediatamente:
Por ejemplo, imaginar un formulario que muestra las provincias de un país. Una vez seleccionada
una provincia, se envía el formulario, se realiza cierto procesamiento y se filtra la lista de ciudades de esa
provincia.
Se puede enviar datos inmediatamente con la propiedad AutoPostBack de los controles web,
cuando seleccionamos esta a true, lo cual indica al control que envíe los datos tan pronto como ocurra el
evento.
Un ejemplo de esto podría ser el siguiente:
<asp:TextBox id="tbNombre" runat="server" _
OnTextChanged="ControladorDeNombre" AutoPostBack="true" />
Por lo tanto, cuando ocurra el evento OnTextChanged, es decir, que cuando cambie el texto del
TextBox, se autoenviará la página con los datos del formulario web a la dirección indicada en el <form>.
15
5. INCLUSIÓN DE ARCHIVOS EXTERNOS DESDE EL SERVIDOR
Un archivo incluído desde el servidor es una forma de separar código de una página, como por
ejemplo, tener por un lado el código dinámico de ASP.NET y por otro el código en HTML, o tener en
archivos diferentes el encabezado, el pie de página y el documento principal. Estos se pueden incluir a
través de una línea sencilla de instrucción.
Los dos tipos de inclusiones que pueden hacerse son las siguientes:
<!-- #include file="../../includes/archivo1.aspx" -->
<!-- #include virtual="/includes/archivo1.aspx" -->
La diferencia entre ambos consiste en que con file se accede a una carpeta que está al mismo nivel
del archivo donde estás haciendo la referencia para el include, mientras que con virtual le estás diciendo
que tienes una carpeta virtual que se llama includes y no importa el nivel donde te encuentres ya que
tomará la ruta virtual para localizar al archivo.
Pongamos un ejemplo sobre el uso de la inclusión de archivos a la hora de separar diferentes partes
de una página web, en cuanto a su estructura externa:
•
Encabezado de la página en encabezado.aspx:
<a href="indice.aspx"><img src="encabezado.jpg" alt="Principal" /></a><hr />
<a href="indice.aspx">Principal</a>
<a href="fin_sesion.aspx">Finalizar sesión</a>
•
Página principal de la aplicación en indice.aspx:
<%@ Page Language="C#" %>
<script runat="server">
private void Page_Load(object obj, EventArgs e) {
/* hacemos algo en la lectura del documento */
}
</script>
<html>
<body>
<!-- #include file="encabezado.aspx" -->
<p>¡Hola a todos!</p>
</body>
</html>
Tras la lectura del archivo indice.aspx, ASP.NET inserta el contenido de encabezado.aspx antes de
procesar cualquier comando, y en la salida del código en HTML aparecen ambos unidos, como si fuera
una página HTML solamente. El archivo encabezado.aspx se encuentra en el mismo directorio que el
archivo indice.aspx, por eso se emplea file y sin ningún tipo de ruta absoluta.
16
6. BIBLIOGRAFÍA Y REFERENCIAS
Prácticamente la totalidad de la información que ha sido extraída para este documento está sacada
de una fuente en concreto: Internet. A través de la lectura y comprensión de varios artículos, manuales y
tutoriales que están a disposición de cualquier usuario, se ha abstraído toda la información necesaria
para la creación de este documento.
Hay multitud de fuentes bibliográficas y referencias consultadas, pero las más relativas las
expondremos a continuación.
Manuales de ASP.NET completos:
•
http://es.gotdotnet.com/quickstart/aspplus/doc/quickstart.aspx
(último acceso el día 10 de enero de 2007)
•
http://www.es-asp.net/tutoriales-asp-net/tutorial-0-61.aspx
(último acceso el día 10 de enero de 2007)
Manuales conceptuales de ASP.NET:
•
http://www.miliuco.net/aspnet/aspnet_intro.html
(último acceso el día 10 de enero de 2007)
•
http://www.gamarod.com.ar/articulos/introduccion_a_aspnet.asp
(último acceso el día 10 de enero de 2007)
•
http://es.wikipedia.org/wiki/ASP.NET
(último acceso el día 10 de enero de 2007)
•
http://www.adrformacion.com/cursos/aspnet2/leccion3/tutorial1.html
(último acceso el día 10 de enero de 2007)
Diferencias entre ASP y ASP.NET:
•
http://www.microsoft.com/spanish/msdn/articulos/archivo/191001/voices/aspnetmigrissues.asp
(último acceso el día 10 de enero de 2007)
•
http://www.programacion.net/asp/articulo/aspnet_quees/
(último acceso el día 10 de enero de 2007)
•
http://www.desarrolloweb.com/manuales/32/
(último acceso el día 10 de enero de 2007)
Ejemplos en ASP.NET:
•
http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpqstart/html/cpsmpASPNE
TQuickStart.asp
(último acceso el día 10 de enero de 2007)
Algunos de estos manuales contienen múltiples ejemplos que pueden ser usados para una posterior
comprensión y práctica de los conceptos adquiridos.
También incluyen descripciones más ampliadas de muchos de los puntos tratados en este
documento, así como otros que por su elevada complicación no han sido expuestos, ya que se pretende
introducir al lector en la tecnología ASP.NET con sus conceptos lo más básicos posibles y a través de
esquemas simples y ejemplos sencillos que sirvan para una mejor búsqueda de información posterior.
17
Descargar