Está en la página 1de 38

FUNDAMENTOS DEL DESARROLLO DE APLICACIONES

WEB

Introduccin al desarrollo con ASP.NET


Ms que una evolucin sobre ASP, ASP.NET es una autntica revolucin en el mundo
del desarrollo Web, y no slo en el mbito relacionado con Microsoft. Lo que mejor
define al desarrollo combinado con ASP.NET y Visual Studio es que ha equiparado la
creacin de aplicaciones para Internet a lo que era comn en entornos de escritorio,
salvando las inherentes dificultades que ello conlleva de forma transparente al
programador.
Los programadores de ASP.NET disponen de todo lo que "siempre" han disfrutado los
programadores de Windows: diseadores visuales, asistencia avanzada contextual,
cdigo compilado de alto rendimiento, transparencia acerca de dnde se ejecuta cada
parte del cdigo, enlace a datos, rejillas, etc...

Las pginas ASPX


Si nos vamos a lo fundamental es posible crear una pgina ASP.NET usando el bloc de
notas y sin saber nada de la plataforma .NET y de sus diferentes espacios de nombre.
Las pginas de servidor de ASP.NET son en esencia archivos de texto que contienen
HTML y etiquetas y que tienen una extensin '.aspx'. Por ello se les denomina de
modo genrico pginas ASPX.
Al igual que las pginas ASP clsicas soportan el uso de etiquetas <% %> para
delimitar bloques de cdigo. De hecho, por compatibilidad, se puede usar en gran
medida todo lo que conocemos de ASP 3.0, lo cual no quiere decir que sea lo ms
recomendable. Sin embargo para familiarizarnos haremos un ejemplo sencillo.

Figura 3.1.1.- Pgina ASPX sencilla


El cdigo de la figura no se distingue de una pgina ASP clsica salvo por la extensin
del archivo (.aspx en lugar de .asp). Sin embargo si navegamos hasta esta pgina
(ubicada en el raz de nuestro servidor IIS) veremos que el resultado es el que
esperbamos:

Figura 3.1.2.- Resultado del cdigo anterior


De todos modos, aunque no podamos percibirla, ya existe una sustancial diferencia con
una pgina ASP: el pequeo fragmento de cdigo que hemos incluido se ha compilado
antes de ejecutarlo, en lugar de haberse interpretado como en ASP. Obviamente en
este caso no ofrece ventaja alguna, pero es importante conocer esta caracterstica
pues nuestras aplicaciones obtendrn un mayor rendimiento por el mero hecho de ser
ASP.NET.

Ms cdigo
Siguiendo con el ejemplo vamos a aadir un poco ms de cdigo para comprobar hasta
que punto son compatibles las pginas ASPX con el cdigo ASP.
Si lo modificamos para que tenga el siguiente aspecto:

Figura 3.1.3.- Ms cdigo aadido a la pgina ASPX


Ahora durante la carga (o la recarga) de la pgina verificamos si se le est pasando un
parmetro por POST, en cuyo caso sustituimos la caja de texto por un saludo al
nombre que se le est pasando:

Figura 3.1.4.- Resultado de la ejecucin.

Estupendo, pero... en qu hemos mejorado?


Este ejemplo nos ha servido para ver qu ASPX sigue siendo compatible en cierta
medida con ASP, y que slo por este hecho ya mejoraremos la escalabilidad de las
pginas. De todos modos el cambio de la extensin del archivo slo funcionar en las
pginas ms sencillas. En cdigo no trivial tenemos una probabilidad tendente a 1 de
que
no
haya
esa
suerte.
Adems, aunque as fuera, no habramos ganado demasiado: seguiramos con cdigo
de cliente y de servidor entremezclado y difcil de mantener y no tendramos ninguna
de las ventajas que hemos mencionado antes.

Si bien podemos escribir cdigo ASP.NET de la manera correcta slo con el bloc de
notas, la mejor forma de desarrollar pginas Web con ASP.NET es usando Visual
Studio 2010, que como veremos enseguida nos ofrece una forma visual de trabajo
junto con una separacin estricta entre el cdigo y la interfaz de usuario, que es lo que
pretendamos.

El entorno de desarrollo: Visual Studio 2010


Visual Studio 2010 es el entorno de desarrollo de aplicaciones Web para la versin 4.0
de la plataforma .NET. Ofrece todo tipo de herramientas para facilitar el trabajo del
programador: diseadores grficos de pginas y clases, asistentes de uso de bases de
datos, un servidor web de desarrollo, ayuda a la escritura de cdigo, y en general todo
lo que se espera de un entorno de desarrollo rpido moderno y mucho ms todava.
Para crear un nuevo proyecto ASP.NET utilice el men ArchivoNuevoSitio Web. Al
hacerlo aparecer un dilogo como el de la figura:

Figura 3.1.5.- El dilogo de nuevo proyecto web (aplicable a Visual Studio


2010).

Nota:
Las plantillas disponibles en el dilogo de nuevo proyecto web puede
diferir dependiendo de la versin de Visual Studio 2010 que utilice. Por
simplicidad se muestra el dilogo de la versin Visual Web Developer
Express, el ms simple.
En l tenemos la oportunidad de elegir qu tipo de proyecto vamos a crear (por
defecto un sitio web de ASP.NET), en qu ubicacin fsica queremos crearlo (lo
normal ser en nuestro disco duro pero podramos elegir un sitio gestionado por FTP o
HTTP) y con qu lenguaje de programacin.
Existen diferentes lenguajes que nos sirven para crear el cdigo de nuestras pginas.
Dado que en la prctica todos tienen las mismas capacidades escoger uno u otro es
una cuestin de eSeccin personal. Dado que este curso est orientado
fundamentalmente a programadores que vienen de ASP o VB6, vamos a elegir Visual
Basic 2010 como lenguaje de todos nuestros ejemplos. En cualquier caso todo lo
explicado para ste es perfectamente vlido para los otros lenguajes y le servir igual
si se decide por ellos.

Explorando el entorno
Tras crear un proyecto nuevo, el entorno tiene un aspecto similar a este:

Figura 3.1.6.- El entorno de desarrollo de Visual Studio tras crear un proyecto


(aplicable a Visual Studio 2010).

Antes de aprender a manejar Visual Studio 2010 vamos a ponernos en situacin


conociendo los distintos elementos que forman parte del entorno.

Explorador de soluciones
Este elemento contiene un rbol con los proyectos en los que estamos trabajando y los
diferentes
archivos
y
carpetas
que
forman
parte
de
ellos.
Nada ms crear un nuevo proyecto Web slo existe una carpeta llamada App_Data, y
una pgina ASPX creada de forma predeterminada que est vaca y es con la que
comenzaremos
a
trabajar.
Los botones de la parte superior se usan para realizar diversas acciones sobre el
elemento que tengamos seleccionado. Por ejemplo en el caso de la pgina podemos
abrir
su
diseo
o
su
cdigo
presionando
respectivamente el tercer y cuarto botones por la
derecha.

rea de documentos

Figura 3.1.7.- rea de documentos mostrando un editor de HTML.


Es la zona situada en el centro del entorno de desarrollo. Contiene los diferentes
editores de cdigo as como diseadores de diversos tipos (de interfaz de usuario, de
clases, de DataSets...). Es en donde pasaremos la mayor parte del tiempo trabajando.

Cuadro de herramientas

Figura 3.1.8.- Cuadro de herramientas y detalle de un algunos grupos de ste.


El cuadro de herramientas contiene los diferentes elementos que podemos utilizar para
la definicin de la interfaz de usuario de nuestra aplicacin, as como algunos otros
componentes no visuales que tambin se pueden arrastrar hacia el diseador visual de
pginas Web. Est situado por defecto en el lateral izquierdo del entorno.

Editor de propiedades
Al igual que en Visual Basic 6.0, Frontpage y otros entornos, el editor de propiedades
nos permite ajustar los valores de las propiedades en tiempo de diseo de los objetos
que
hayamos
seleccionados.
Este editor sirve para ajustar las propiedades de todos los objetos que podamos utilizar
en el entorno: tanto de los controles que se arrastran sobre un diseador como de los
propios archivos del explorador de soluciones y las etiquetas HTML o XML, etc...

Algunas propiedades se editan directamente en el


espacio disponible y otras lanzan un asistente o un
diseador que nos ayuda con la tarea.
Se
pueden
ver
las
propiedades
ordenadas
alfabticamente o bien agrupadas en diferentes
categoras (opcin por defecto). Adems de las
propiedades tambin se pueden ajustar los gestores
de eventos de los objetos usando el penltimo botn
por la derecha. En la parte inferior se obtiene una
concisa ayuda sobre cada propiedad seleccionada.

Barras de herramientas y mens

Se sitan en la parte superior y dan acceso al resto de las caractersticas de la


herramienta de trabajo. Segn el contexto en el que nos encontremos las barras de
herramientas que veremos sern distintas. Visual Studio se encarga de mostrar y
ocultar la ingente cantidad de barras disponibles mostrando en cada caso slo las que
necesitemos. Esto racionaliza el acceso a los elementos de la interfaz que de otro
modo seran inmanejables.

Trabajo con formularios Web y controles


El entorno de trabajo que hemos explorado es muy intuitivo y fcil de utilizar. En la
mayor parte de los casos vamos a hacer uso nicamente de los tres diseadores que
hemos visto en el vdeo de la Seccin anterior: diseador visual de formularios Web,
diseador de HTML y editor de cdigo de VB.NET.
Creemos un ejemplo sencillo desde cero para ver cmo se trabaja. Luego estudiaremos
la estructura de los archivos generados para comprender su funcionamiento. El
ejemplo es el mismo que hemos creado en la primera Seccin del mdulo pero
utilizando el modo de programar de ASP.NET y no el cdigo "espaguetti" tpico de ASP
clsico que hemos utilizado antes.

Creando la interfaz grfica del ejemplo


Desde Visual Studio cree un nuevo proyecto de sitio Web. Abra el diseador de la
pgina por defecto que se crea (Default.aspx) haciendo doble click sobre ella. Aada
un control de tipo etiqueta (Label) en la parte superior y establezca su propiedad Text

con el valor "Bienvenido a ASP.NET! ", eligiendo un tipo de letra de tamao grande y
color rojo.
Justo debajo agregue un control TextBox, y establezca su propiedad ID como
"Nombre", Width como 200px y MaxLength ajstela a 40.
A continuacin introduzca un botn (Button) y asgnele el texto "Saludar" (propiedad
Text) y otrguele el nombre de "cmdSaludar".
Por fin aada una etiqueta ms con el nombre lblSaludar, y ajuste su propiedad
Visible a False para que no se vea en el formulario web una vez que lo ejecutemos.
Cuando acabe el aspecto del formulario debera ser muy similar a ste:

Figura 3.1.9.- Aspecto del ejemplo tras haber aadido los controles.
Nota:
Si no tiene claro cmo hacerlo vea el primer vdeo de esta Seccin al pie
de este documento en donde se desarrolla el ejemplo completo.

Respondiendo al evento del botn


Para saludar al usuario con el nombre que introduzca en el campo de texto debemos
responder a la pulsacin del botn. En ASP clsico tendramos que enviar un formulario
a otra pgina (o a la misma) y ver qu valores no es estn pasando para actuar en
consecuencia. En ASP.NET esto no es necesario ya que trabajaremos segn el clsico
paradigma orientado eventos, respondiendo a las acciones del usuario.
En este caso debemos interceptar la pulsacin del botn por parte del usuario
verdad?. Pues lo nico que tendremos que hacer es escribir un manejador para el
evento Click del botn, algo que resultar familiar e intuitivo a los programadores de
VB6. Para ello haga doble-clic sobre el botn en el diseador. Esto har que se abra el
editor de cdigo y que automticamente aparezca un manejador de eventos para el
evento Click, que es el predeterminado de los botones:

Figura 3.1.10.- Manejador del evento Click generado automticamente por el


editor.
Al igual que en VB6 desde el cdigo del evento (que se ejecutar en el servidor,
atencin!) podemos hacer referencia a cualquier control de la pgina y acceder a sus
mtodos y propiedades. De este modo se puede escribir el siguiente cdigo simple:

Es decir, se concatena un saludo al nombre introducido en el campo de texto


asignndoselo como texto a mostrar a la etiqueta oculta, y se hace visible sta usando
su propiedad Visible.
Si ejecutamos ahora el ejemplo (presionando F5 o el botn correspondiente en la barra
de herramientas) veremos que funciona sin problemas:

Figura 3.1.11.- Nuestro ejemplo antes y despus de presionar el botn.


Ntese que no hemos aadido formulario alguno, ni tampoco JavaScript, y que en
realidad para nosotros es transparente el modo en como se gestionan los eventos e
incluso que lo que estamos creando sea una aplicacin Web. No hemos usado HTML y
(hasta cierto punto) nos da igual que el cdigo se ejecute en el servidor o en el cliente.

Pero... Cmo funciona esto por debajo?


Si echamos un vistazo al cdigo de la pgina generada veremos que, aparte del HTML
que es ms o menos obvio que debera haber dados los controles que hemos utilizado,
existe tambin bastantes lneas de cdigo JavaScript y algunos campos ocultos.
Los campos ocultos se utilizan para almacenar informacin sobre la pgina y el cdigo
JavaScript se ocupa de su mantenimiento y de enviar el formulario al servidor ante
determinadas acciones del usuario (simulando los eventos).
Uno de los campos ocultos ms importantes es el que se refiere al ViewState.

Figura 3.1.12.- Viewstate de una pgina sencilla.


El ViewState - que se podra traducir como "Estado de Visualizacin" - recoge de
manera automtica el estado y el contenido de los controles de una pgina. Esta
informacin se utiliza para dejarlos como estaban en cada recarga de la pgina.
Cuando presionamos el botn de nuestro ejemplo la pgina se recarga y todo lo que
contiene debe estar igual que antes de hacerlo o no podramos asimilarlo a un
formulario. A excepcin de una pequea demora por el viaje de ida y vuelta al servidor,
para el usuario no debe haber sensacin de recarga de la pgina. El ViewState se
encarga de ello.
Nota:
A cada viaje de ida y vuelta de nuestra pgina al servidor como
consecuencia de un evento en el cliente se le denomina PostBack. Se
puede averiguar si la carga actual de la pgina es la primera o se trata
de un PostBack consultando el valor booleano de la propiedad
IsPostBack de la pgina (Me.IsPostback).
Como se aprecia en la figura se trata de informacin sobre la jerarqua de controles de
la pgina codificada para su envo al servidor. Al recibirla, la clase Page de la que
hereda nuestra pgina se encarga de decodificarlo, procesarlo e inicializar de nuevo el
estado de cada control segn la informacin facilitada, sin necesidad de trabajo por
nuestra parte.

Por otra parte, para determinar qu evento se ha producido, se emplean tambin dos
campos ocultos y un poco de JavaScript:

Figura 3.1.13.- Campos ocultos de informacin sobre eventos

Figura 3.1.14.- JavaScript asociado a la notificacin de eventos al servidor.


Cuando se efecta alguna accin el JavaScript de la pgina se encarga de rellenar
estos campos y provocar un PostBack de la pgina. El evento es detectado en el
servidor a travs de estos campos ocultos y se gestiona adecuadamente por ASP.NET,
que se encarga de notificar los eventos.
Los mecanismos de ViewState y de PostBack son los responsables de que, a efectos
prcticos, podamos trabajar en la Web utilizando el paradigma de programacin
orientada a eventos.
Imagnate tener que gestionar eso t mismo con cdigo propio!

Otras partes del funcionamiento de ASP.NET a tener en


cuenta
El archivo machine.config
Este archivo contiene informacin de configuracin de todos los proyectos ASP.NET.
Es por ello lgico pensar que aqu se reunir aquella informacin compartida por todos
los proyectos Web, y que la informacin de configuracin de cada aplicacin, deber
agregarse en el archivo Web.config.

El archivo Web.config
Este archivo contiene los parmetros y opciones de configuracin de las aplicaciones de
ASP.NET. Cada
aplicacin
Web
contendr
su
archivo
de
configuracin.
Hasta la versin de ASP.NET 4.0, este fichero ha crecido enormemente debido al
aadido de opciones sucesivas que se han realizado como por ejemplo Ajax.
A partir de la versin de ASP.NET 4.0, este fichero y su informacin se ha reducido
considerablemente, ya que muchas de las opciones agregadas han ido a otro fichero de
configuracin llamado machine.config.

Ejecucin de una aplicacin ASP.NET por primera vez y el inicio


automtico
Un detalle a tener en cuenta es que las aplicaciones Web de ASP.NET necesitan ser
ejecutadas por primera vez para que se prepare y compile, y est lista y disponible de
forma ms gil en peticiones posteriores.

Esto se aprecia mucho mejor si ejecutamos una pgina Web de una aplicacin Web
ASP.NET que muestre una informacin de texto en pantalla, y si volvemos a ejecutar
esa misma pgina Web. El tiempo de espera de la siguiente peticin ser mucho
menor.
Para resolver esta problemtica, se poda ejecutar las pginas ASP.NET previamente o
acudir al cdigo de inicializacin del mtodo Application_Load que se encuentra en el
archivo Global.asax para realizar diferentes operaciones que faciliten ese despertar.

A partir de ASP.NET 4.0, se puede hacer uso de la escalabilidad de inicio automtico


que tiene este objetivo y que se ejecuta en IIS 7.5 superior y en sistemas operativos
Windows Server 2003 R2 superior.

Con el inicio automtico, podemos poner en funcionamiento un conjunto de


aplicaciones Web inicializndolas de forma que las peticiones HTTP puedan ser
aceptadas directamente.
Para llevar a cabo esta tarea, deberemos agregar en el archivo applicationHost.config
los siguientes parmetros:
<applicationPools>
<add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationPools>

Lmite de tamao en las URLs


En ASP.NET el lmite de longitud de una URL es de 260 caracteres, tamao basado en
el lmite de directorios y ficheros de NTFS.
En ASP.NET 4.0, ese lmite puede incrementarse o decrementarse como deseemos.
Esto se logra utilizando dos nuevos atributos httpRuntime de configuracin.
Un ejemplo de uso de este atributo es el que se indica a continuacin:
<httpRuntime
maxQueryStringLength="2048" />

maxRequestPathLength="260"

Con el atributo maxRequestPathLength modificamos las rutas sin incluir el protocolo y


el nombre del servidor.
Con el atributo maxQueryStringLength permitimos cadenas de bsqueda ms largas o
cortas dependiendo del valor dado.

Denegacin de caracteres en URLs


Una nueva caracterstica de ASP.NET 4.0 y versiones posteriores es la posibilidad de
denegar caracteres especiales en una URL.
Esto se logra haciendo uso del atributo requestPathInvalidChars, e indicando en ese
atributo, el caracter o caractes especiales que provocarn un error de tipo 400 (Bad
request).
En el siguiente ejemplo, se indica los parmetros de configuracin que habra que
poner para denegar el acceso a una URL con unos determinados caracteres:
<httpRuntime requestPathInvalidChars="<,>,*,%,&,:,\,-" />

Los archivos de cdigo


Centremos nuevamente nuestra atencin en los archivos de cdigo de servidor que
tenemos en Visual Studio 2010. Existen dos: uno que define la interfaz de usuario y
otro para la lgica de la aplicacin. Veamos cmo estn formados y cul es el nexo de
unin entre ellos.

El archivo .aspx de interfaz de usuario.


En realidad todo el cdigo se ejecuta en el servidor y, por poco intuitivo que sea para
un programador Web tradicional, el evento desencadenado por la pulsacin se gestiona
en el servidor, no en el cliente. Veamos cmo funciona.

Para crear la interfaz de usuario slo hemos tenido que arrastrar controles Web desde
el cuadro de herramientas al diseador. Por detrs lo que ha estado ocurriendo es que
el cdigo HTML de la pgina ha estado creciendo hasta ser como el siguiente:

Figura 3.1.15.- Cdigo HTML de la interfaz de usuario ASPX.


Vemos que, sin que conscientemente lo hayamos hecho, se ha creado un formulario
(Form1) que al carecer de un atributo ACTION se enviar a si mismo. Este formulario
(y otros elementos tienen asignado el atributo runat="server". ste se usa para
indicar que son controles de servidor y que, como tales, debern estar disponibles para
el cdigo que se ejecuta en el servidor, como por ejemplo nuestro manejador del
evento.
Nota:
En las pginas ASPX slo se recomienda el uso de un formulario, que es
adems el formulario que incluye automticamente el entorno de
desarrollo. Lo cierto es que no se trata de limitacin alguna puesto que
la filosofa de desarrollo es completamente distinta a la tradicional y no
los vamos a necesitar.
El resto de elementos que aparecen son etiquetas HTML normales (p.ej<br/> para
cambio de lnea) y unas etiquetas especiales que llevan el prefijo asp:. Este prefijo
indica que son controles web de ASP.NET, y como tales son objetos de las clases
contenidas en el espacio de nombres System.Web.UI.WebControls. Al compilar la
pgina ASP.NET instancia dichas clases y las pone a disposicin de nuestro cdigo
pasando todo ello inadvertido para nosotros.

El archivo .vb de lgica de la aplicacin


Por otro lado existe un archivo con extensin .vb, dependiente, segn el explorador de
proyectos, del archivo .aspx anterior.

Figura 3.1.16.- Archivo .vb de lgica de la aplicacin


ste contiene la "lgica" de la aplicacin, es decir, lo que hace que una interfaz de
usuario se comporte de un determinado modo. En nuestro caso contiene el manejador
del evento con lo que deseamos que ocurra al presionar el botn. En una aplicacin
real podra contener multitud de cosas ms.
Nota:
Aunque es muy tentador abusar de la capacidad de crecimiento de estos
archivos de cdigo, suele ser mucho ms recomendable repartir toda
aquella funcionalidad que no se refiera a la interfaz de usuario (es decir,
lo que no sean eventos normalmente) en otros archivos y clases
desligados de pginas aspx. Veremos cmo hacerlo en breve en este
curso.
Desde este archivo de cdigo podemos responder a cualquier evento de los controles
de interfaz de usuario o de la propia pgina, y acceder a sus mtodos y propiedades.
Gracias a la existencia de estos dos archivos podemos independizar el aspecto de la
aplicacin (la interfaz) de lo que queremos hacer con ella. De hecho incluso se podra
programar con dos equipos distintos, cada uno encargado de una cosa. Esta constituye
tambin una de las grandes ventajas de ASP.NET.

En dnde se encuentra el nexo entre interfaz y lgica?


Tras esta pregunta tan aparentemente filosfica se encuentra una respuesta muy
sencilla: la directiva de pgina @Page y la existencia de clases parciales en .NET
2.0.
Si nos fijamos en el cdigo de la pgina ASPX de la figura anterior, la primera lnea es
una directiva @Page con diversos atributos.

AutoEventWireUp: indica si los eventos se deben generar de forma


automtica o no. A los efectos de este curso no hablaremos ms de l.

CodeFile: este atributo es especfico de Visual Studio y le indica cul es el


archivo de cdigo (.vb) que contiene la definicin de la lgica de la pgina.

Inherits: indica de qu clase heredar la clase auto-generada por ASP.NET


para gestionar los contenidos de la pgina ASPX actual (repase el primer vdeo
de este mdulo acerca de cdigo compilado).
Nota:
Inherits es un atributo nuevo en ASP.NET 2.0, y arrastrado a ASP.NET
3.5 superior, que modifica el modelo utilizado en Visual Studio 2002 y
2003 para crear cdigo de lgica de negocio para las pginas,
denominado 'code-behind'. Si has trabajado algo con estas versiones
anteriores te sorprender ver este cambio y lo mucho que con l se
reduce el cdigo necesario para crear las pginas ASPX, ya que no hay
que declarar los controles ni inicializarlos en el cdigo de lgica.

Si ahora os fijamos en el cdigo de lgica de la pgina (figura 3.1.10 anterior),


veremos que se define parcialmente una clase _Default. Y este es el nexo de unin
entre ambos archivos.
Cuando ASP.NET genera la pgina primero completa automticamente el cdigo de la
clase _Default con otra implementacin parcial de sta en la que se definen los
controles de la pgina (el cdigo que ha desaparecido respecto a las versiones
anteriores del entorno). Luego define una nueva clase especfica para la pgina que
hereda de _Default y es en ella donde inicializa los controles y hace el nexo entre la
interfaz y la lgica. Es por este motivo que ahora los manejadores de eventos de la
clase se declaran con accesibilidad protected, para que puedan utilizarse desde la clase
derivada.
Nota:
A esta novedosa forma de separar (y al mismo tiempo unir en tiempo de
ejecucin) la interfaz de la lgica hay quien la denomina "codebeside", como homenaje al hasta ahora utilizado "code-behind" de
ASP.NET 1.x.
Nota:
Todo lo explicado es muy fcil de verificar si se accede a la carpeta
temporal de ASP.NET tal y como se demostr en el primer vdeo de este
mdulo. En l encontraremos los archivos de cdigo autogenerados
por .NET en los que podremos comprobar lnea por lnea todo lo que he
comentado. Se trata de una iniciativa muy didctica.

Los controles de ASP.NET


ASP.NET ofrece una gran cantidad de controles que se pueden usar en los desarrollos
de aplicaciones Web. Durante la Seccin anterior hemos podido ver algunos de ellos en

funcionamiento mientras que supimos de la existencia de otros al verlos en el cuadro


de herramientas.
En esta Seccin vamos a conocer desde un punto de vista general los tipos de
controles existentes y aprenderemos, con ms detalle, la utilizacin unos controles
muy tiles: los controles de validacin.

Los controles HTML


Hasta ahora hemos visto lo sencillo que resulta trabajar con controles de servidor
arrastrndolos y soltndolos en los formularios Web. Los controles que hemos utilizado
se definen usando una sintaxis especial (<asp:...>) y como hemos podido comprobar
responden
a
un
comportamiento
complejo.
Antes de ASP.NET cuando necesitbamos
usar
un
control
en
una
pgina
emplebamos alguno de los definidos en
HTML: controles de tipo <input>,
<textarea> o <img> entre otros. Con
ASP.NET disponemos tambin de la
posibilidad de usarlos.
Desde el cuadro de herramientas
disponemos del grupo HTML (ver figura
adjunta) que son controles equivalentes a
los de HTML.
Podemos arrastrarlos y soltarlos sobre
nuestro formulario al igual que los otros,
pero al contrario que stos no se
ejecutarn por defecto en el servidor.
Slo aparecer su sintaxis HTML pura y dura.
Se trata de controles muy tiles en determinadas ocasiones en las que no necesitamos
todas las ventajas que nos ofrecen los controles de servidor, por ejemplo:
No vamos a acceder a sus mtodos y propiedades desde el servidor.
Quiz no necesitamos que mantengan su estado o respondan a evento alguno.
El uso del campo oculto ViewState puede cargar la pgina en exceso si hay muchos
controles, por no mencionar que hay que crear clases en el servidor que los
representen cuando se procesa la pgina. Todo ello reduce la respuesta de la pgina.

Por supuesto podemos convertirlos en controles de servidor simplemente asignando su


atributo runat, as:
<input id="Button1" type="button" value="button" runat="server" />

Como vemos es un botn corriente de HTML al que se la ha aadido el atributo runat.


Slo con esto hemos conseguido que el control est disponible desde nuestro cdigo de
servidor (como en el ejemplo) y disfrutaremos de todas las cualidades conocidas:
acceso a sus propiedades y mtodos, conservacin del estado, etc...
En el rea de diseo del formulario es muy fcil distinguir los controles de servidor de
los HTML porque los primeros tienen un pequeo tringulo verde que los marca. En la
siguiente figura todos los controles se ejecutan en el servidor excepto el botn "button"
de la derecha.

Figura 3.2.1.- Distincin entre Controles de servidor y HTML


Los controles HTML, en cualquier caso, son mucho ms sencillos que los otros controles
Web. Tienen menos propiedades y eventos, los cuales se suelen corresponder adems
con los mismos que tienen en HTML+Javascript. Son ms adecuados cuando no
requerimos una gran flexibilidad y queremos cargar la pgina lo mnimo posible.
Esta figura ilustra la jerarqua de los controles HTML en ASP.NET:

Figura 3.2.2.- Jerarqua de los controles HTML


Todos ellos, obviamente, heredan de la clase Object, pero tambin heredan de la clase
base
HtmlControl
que
est
contenida
en
el
espacio
de
nombres
System.Web.UI.Control.
Sus propiedades se corresponden con los atributos HTML del control correspondiente,
por lo que la nomenclatura utilizada no es consistente con la utilizada en el resto de la
plataforma ASP.NET.

Los controles Web


Son controles nativos de ASP.NET. Aunque algunos parecen asimilables a controles
HTML, todos van mucho ms all en cuanto a caractersticas y capacidades. De hecho,
aunque algunos son relativamente sencillos (como una etiqueta, un botn o un cuadro
de texto), existen controles muy complejos que sera difcil recrear desde cero con
HTML y JavaScript. Por ejemplo el control calendario, las rejillas de datos, los controles
maestro-detalle, validadores, etc...
Sus mtodos y propiedades tienen nombres consistentes con el resto de la plataforma.
Por ejemplo, para fijar el texto de un botn o de una etiqueta se usa la misma
propiedad Text. Para establecer el color de fondo todos usan BackColor. Esto hace
que sea ms fcil el desarrollo porque no hay que memorizar nomenclaturas diferentes
para cada control.

Adaptacin automtica al cliente


Los controles Web que vienen con ASP.NET tienen otra caracterstica que los hace
nicos y es la adaptacin automtica al navegador. ASP.NET detecta con qu cliente se
est accediendo (un navegador moderno o antiguo, un PDA, Internet Explorer o

Netscape, etc...) y de forma autnoma adapta el cdigo que muestra a las capacidades
y restricciones concretas del navegador utilizado.
Esta adaptacin tiene en cuenta el soporte de HTML y JavaScript, pero tambin
cuestiones como si se deben usar etiquetas bsicas en lugar de hojas de estilo CSS
para el aspecto.
En esta nueva versin 3.5 de ASP.NET va un paso ms all permitiendo la adaptacin
automtica de los controles a diferentes navegadores y dispositivos incluso mviles
(telfonos y PDA de cualquier marca). A esta caracterstica se la conoce como
renderizacin adaptativa.

Figura 3.2.3.- Renderizacin adaptativa:


navegador y visto desde un mvil WAP.

un

mismo

calendario

en

un

La renderizacin adaptativa tiene implicaciones importantes ya que (hasta cierto


punto) no hay que tener en cuenta de antemano si un desarrollo ser para un
navegador concreto o incluso para dispositivos mviles basados en WAP. Por otra parte,
y tal vez ms importante, est el hecho de que no hay que aprender todo un conjunto
diferente de habilidades para poder programar para dispositivos mviles. Podemos
reutilizar lo que estamos aprendiendo en este curso!.
La siguiente figura muestra la jerarqua de algunos controles Web de servidor incluidos
con ASP.NET 3.5:

Figura 3.2.4.- Jerarqua de controles Web de servidor.

Controles de terceras empresas


Aparte de los controles que vienen con ASP.NET 3.5 tambin es posible utilizar desde
nuestras aplicaciones cualquier otro control Web diseado por terceras empresas.
Existen infinidad de ellos de todos los tipos, algunos realmente potentes.

Figura 3.2.5.- Algunos ejemplos de controles Web de terceras empresas.

En http://www.asp.net/community/control-gallery/
catlogo clasificado de controles Web de servidor.

podr

encontrar

un

extenso

Controles propios
Como no podra ser de otra manera, ASP.NET no nos limitar a la hora de crear
controles propios para reutilizar funcionalidad en nuestras aplicaciones o incluso para
venderlos a otras empresas.
Existen dos tipos de controles que podremos crear:

Controles Web: son controles como los que hemos visto hasta ahora y
equiparables en todos sus aspectos a los controles nativos de ASP.NET 3.5.

Controles de usuario: permiten la reutilizacin de partes completas de la


interfaz de usuario y de la lgica asociada a sta, aunque el soporte para
configurarlos en tiempo de diseo es mucho ms reducido que en el caso de los
anteriores. Sin embargo son muy fciles de crear y ofrecen un mtodo sencillo
de encapsular funcionalidades que incluyan interfaz de usuario.

La creacin de controles Web (primer tipo) es una cuestin compleja que se sale del
mbito de este curso, por lo que no los estudiaremos. Sin embargo en la siguiente
Seccin veremos la forma de crear nuestros propios controles de usuario.
Investigue por su cuenta la funcionalidad de algunos de los controles disponibles en
ASP.NET. Es la mejor forma de aprender. Descubrir que la mayora son muy fciles de
utilizar y sus propiedades y mtodos son de uso sencillo. Deje de momento los
enlazados a datos pues sern objeto de un mdulo posterior y suelen tener ms
complicacin.

Controles de Ajax - Ajax Control Toolkit


Dentro de CodePlex, se puede encontrar un proyecto de nombre Ajax Control Toolkit
que proporciona ms de 30 controles que tienen como misin extender con ms
funcionalidad a los controles de ASP.NET estndar.
Estos controles tienen su mayor inters en la parte cliente, donde el usuario interacta
con la aplicacin Web, sin embargo, son aadidos y configurados en el servidor.
Lo ms destacable de estos controles es que proporcionan una interfaz de usaurio con
mayores posibilidades que las que aporta los controles estndar de ASP.NET.
La nica caracterstica a tener en cuenta es que estos controles requieren de un control
ScriptManager.
Los controles de Ajax Control Toolkit, pueden ser utilizados en Visual Studio 2005 o
porterior. La nica cosa a tener en cuenta es que a veces, dependiendo del entorno de
desarrollo seleccionado, deberemos elegir un paquete de ensamblados u otro.

Para usar estos controles, deberemos descargarnos el ensamblado correspondiente del


enlace que indicamos anteriormente, e irnos al cuadro de herramientas y seleccionar el
ensamblado para que agregue all los controles de usuario a utilizar.
Una vez hecho esto, podremos arrastrar y soltar el control o controles deseados en el
formulario Web.
Al aadir un control a nuestro formulario Web, ste inserta automticamente un
control ScriptManager.
Ms adelante veremos como utilizar Ajax con el Ajax Control Toolkit en nuestras
aplicaciones Web.

Controles Web de validacin


Dentro de la pltora de controles de ASP.NET existe un grupo "Validacin" que, como
es fcil imaginarse, contiene una serie de controles que permiten realizar de manera
cmoda la validacin de datos introducidos por los usuarios.
Lo habitual en las aplicaciones Web es realizar una doble validacin. Por un lado se
suele implementar una primera validacin en el cliente (es decir, en el navegador de
los usuarios) utilizando para ello cdigo JavaScript. Esto permite una primera barrera
que no implica el envo de datos innecesarios al servidor. Como principales desventajas
de usar JavaScript para la validacin se encuentran la de ser cdigo tedioso de escribir
y, sobre todo, que es muy fcil evitarla.
Bastara con que un usuario no tuviese
JavaScript habilitado para que no
funcionara en absoluto.
Por otra parte tambin se suele realizar
una segunda comprobacin en el
servidor. En aras de la seguridad, como
mxima
de
cualquier
desarrollo
deberamos tomar siempre la siguiente:
"Jams deber fiarme de nada que me
llegue de un origen fuera de mi control". En este caso aunque hayamos habilitado una
primera validacin en el cliente con Javascript no debemos fiarnos en absoluto de que
sta se haya realizado. Por ello debemos validar todos los datos siempre en el servidor.
Si hay que quitar una validacin que sea siempre la del cliente.
Esta doble validacin suele ser bastante engorrosa y supone un esfuerzo de desarrollo
adicional que sera estupendo poder obviar. Pensando en facilitarnos este tipo de tareas
ASP.NET nos ofrece los controles de validacin.
Estos controles permiten definir reglas de validacin en la entrada de datos. Dichas
reglas se asocian con otros controles que forman parte del formulario web, y se
combinan entre ellos para especificar mltiples restricciones sobre los datos
introducidos.

Las condiciones tpicas son, por ejemplo, que un campo no se puede quedar vaco, que
tiene que estar comprendido dentro de un rango determinado o incluso que debe
cumplir con una expresin regular que indiquemos. Por supuesto es posible tambin
definir reglas propias personalizadas.
La principal ventaja de estos controles es que permiten la definicin de reglas de
validacin de forma declarativa, es decir, no hace falta escribir cdigo para usarlos.
Ello facilita mucho el desarrollo y el mantenimiento de las reglas de validacin.
Una vez que definamos las reglas para un formulario los controles de validacin se
encargan automticamente de validarlas tanto en el cliente como en el servidor.
En el lado cliente se convertirn en cdigo JavaScript muy parecido al que nosotros
usaramos, actuando de primera barrera y evitando viajes innecesarios al servidor. Las
comprobaciones del lado del servidor nos evitan problemas cuando, por el motivo que
sea, no han actuado las validaciones en el cliente.
Nota:
Se puede desactivar la validacin en el lado del cliente de un control
estableciendo su propiedad EnableClientScript a False. Podemos
deshabilitar la validacin del lado cliente de todos los controles
estableciendo la propiedad ClientTarget de la pgina actual con la
cadena "DownLevel" desde el evento de carga de la pgina. Con ello slo
se realizar la validacin en el servidor.

Uso de los controles de validacin


Para hacer uso de uno de estos tiles controles basta con arrastrarlos al formulario.
Veremos que al hacerlo se muestran como si fueran etiquetas normales, aunque con el
texto de color rojo. Este es el aspecto que tendrn si se hace necesaria su actuacin.
Mientras no se produce una situacin en la que la validacin fracasa sern invisibles.
Toda esta funcionalidad se consigue utilizando JavaScript, es decir, que no se enva
nada al servidor (no se hace un post-back).
Cada control de validacin que arrastremos se debe asociar al control del que deber
"estar pendiente". Por supuesto es posible arrastrar varios validadores y asociarlos a
un mismo control para as verificar varias condiciones. Lo contrario no es cierto, es
decir, no se puede usar un solo validador para verificar varios controles. El control a
verificar se asigna mediante la propiedad ControlToValidate del control de validacin.
Aunque su utilidad es bastante intuitiva, la siguiente tabla indica el uso apropiado de
cada uno de los controles disponibles:
Control

Utilidad

RequiredFiledValidator

Verifica que el control asociado


no se encuentra vaco.

RangeValidator

Genera un mensaje de error


cuando el contenido de su control
asociado est fuera de un rango
de valores dado. Permite validar
intervalos numricos (enteros o
decimales o monedas), fechas y
cadenas de texto.

RegularExpressionValidato Compara un texto introducido por


r
el usuario con una expresin
regular.
CompareValidator

Permite
comparar
el
valor
introducido por el usuario con
una constante o con el valor de la
propiedad de otro control.

CustomValidator

Se usa para implementar lgica


de validacin propia tanto en el
cliente como en el servidor.

Tabla 3.2.1.- Controles de validacin y su utilidad.


El control ValidationSummary (abajo de todo en el grupo de controles de la figura
anterior) se usa para mostrar un resumen de todo lo que est mal en un formulario en
lugar de mostrar cada uno de los mensajes de error individualmente.
No todos los controles se pueden validar con los controles de validacin. De hecho slo
un pequeo subconjunto de todos los controles Web son adecuados para un uso
conjunto. En cualquier caso los incluidos cubren la mayor parte de las necesidades
normales de introduccin de datos, y son los siguientes:
Control

Tipo

Propiedad

HtmlinputText

Entrada de texto

Value

HtmlTextArea

Entrada de texto

Value

TextBox

Entrada de texto

Text

HtmlSelect

Lista de seSeccin

Value

ListBox

Lista de seSeccin

SelectedItem.Value

DropDownList

Lista de seSeccin

SelectedItem.Value

RadioButtonLis Botones
t
seSeccin
HtmlInputFile

de SelectedItem.Value

Envo de archivos

Value

Figura 3.2.2.- Controles que se pueden validar y las propiedades que se


validan en ellos.
Aparte de mostrar la informacin de error al usuario, en los eventos de la pgina
gestionados en el servidor podemos comprobar el valor de la propiedad IsValid del
objeto Page. sta ser False si alguno de los controles de validacin ubicados en la
pgina no ha pasado la prueba de verificacin. Esto es muy til para realizar acciones
complementarias en el servidor en caso de haber errores.
Sabiendo todo esto es fcil utilizar cualquiera de los controles de este tipo. Consulte el
vdeo de esta Seccin para ver una prctica de uso.

Validadores personalizados
Tal vez el validador que necesite ms explicacin es el CustomValidator. Como su
propio nombre indica se usa para crear normas de validacin propias que no se
adapten a ninguna de las contempladas con los dems controles. Para conseguirlo se
definen funciones de validacin en el cliente y en el servidor.
Las funciones de validacin en el cliente se escriben en JavaScript o en VBScript y
se asocian con el control mediante la propiedad ClientValidationFunction. la funcin
definida puede tener cualquier nombre pero debe tomar dos argumentos, as:
function miValidador(origen, argumentos)
{
}

El primer argumento, origen, obtiene una referencia al control de validacin (un


elemento <span></span> de HTML que contiene el mensaje a mostrar) que nos
permite mostrarlo u ocultarlo o cambiar el contenido del mensaje. El segundo
argumento es ms importante puesto que se trata de un objeto con dos propiedades:
Value y IsValid. La primera contiene el valor a validar que est extrado del control
asignado en la propiedad ControlToValidate. La segunda se usa para indicar si la
validacin ha tenido xito o no.
Por ejemplo, para validar que el nmero introducido en un control es impar,
arrastraramos un control CustomValidator al formulario Web, asignaramos su
propiedad ControlToValidate para que apunte a un campo de texto, y estableceramos
la propiedad ClientValidationFunction con el valor "ValidaImpar" que es el nombre de la
funcin JavaScript. A continuacin incluiramos en la cabecera de la pgina un
fragmento de JavaScript como este:

<script language="javascript">
function ValidaImpar(origen, args)
{
if (args.Value % 2 == 0) //Si es divisible entre 2 es par
args.IsValid = false;
else
args.IsValid = true;
}
</script>

Ahora todava falta la validacin en el servidor que de hecho es la ms importante.


Su funcionamiento es igual de sencillo. Hay que gestionar el evento ServerValidate
del control CustomValidator. Este evento obtiene argumentos del tipo
ServerValidateEventArgs que son funcionalmente equivalentes a los que acabamos
de ver en el caso del cliente, es decir, disponen de las propiedades Value e IsValid.
Para rematar nuestro ejemplo con la validacin en el servidor slo es necesario escribir
el siguiente cdigo VB.NET:

Como se puede observar es funcionalmente idntico al cdigo que escribimos para el


cliente en JavaScript.
Nota:
Este control de validacin personalizada ya exista en versiones
anteriores de ASP.NET. En stas el evento de validacin no se notificaba
cuando el control a validar estaba vaco. Para conservar la compatibilidad
el control CustomValidator de ASP.NET 3.5 trabaja de la misma manera.
Sin embargo es posible forzar la validacin incluso con el campo vaco si
establecemos la propiedad ValidateEmptyText del CustomValidator a
True.

Colocar el foco en el error


Otra accin muy comn a la hora de validar datos en un formulario es colocar el foco
sobre el control que contiene informacin errnea. De este modo se facilita al usuario
la introduccin del nuevo valor pues no tiene que activar el control con el ratn.
Podemos hacer que los controles de validacin hagan esto por nosotros con slo
establecer a True su propiedad SetFocusOnError. Esta caracterstica es nueva en
ASP.NET 2.0 y por lo tanto en ASP.NET 3.5.

Controles de usuario
Como ya hemos adelantado en la Seccin anterior, aparte de la compleja creacin de
controles Web personalizados del estilo de los que vienen con ASP.NET, existe una
forma rpida y sencilla de reutilizar partes completas de funcionalidad e interfaz de
usuario. Para ello no es necesario tener profundos conocimientos de la plataforma
.NET. Ni siquiera hacen falta conocimientos de HTML. Se trata de los controles de
usuario.
En esta Seccin veremos qu son, cmo se crean y cmo se utilizan.

Controles de usuario
Los controles de usuario son tan fciles de crear que, de hecho, ya conoce casi todo lo
que necesita para construirlos. Se crean exactamente igual que los formularios Web y
disponen de un diseador visual idntico que permite arrastrar otros controles sobre su
superficie. De hecho cualquier formulario Web (pgina ASPX) puede transformarse
directamente en un control reutilizable con slo unos pocos cambios de sintaxis.
Para aadir un nuevo control de usuario pulse con el botn secundario sobre el nodo
raz del proyecto en el explorador de soluciones y escoja la opcin "Agregar
elemento...". En el dilogo que aparece (ya sobradamente conocido) seleccione el
icono correspondiente a Control de usuario Web, como se ilustra en la siguiente
figura:

Figura 3.3.1.- Dilogo para aadir un nuevo control de usuario.


Si se fija en la figura detenidamente ver que, salvo por el icono elegido, no hay
diferencia alguna con aadir un nuevo formulario Web. De hecho la nica diferencia
existente en este punto es la extensin que
se le otorgar al archivo resultante, que es
.ascx en lugar de .aspx.
El
archivo
resultante
se
distingue
fcilmente en el explorador de proyectos
porque Visual Studio le asigna un icono
diferente (vea la figura lateral).
Al igual que un formulario Web corriente
un control de usuario dispone de un
diseador visual con doble vista (Diseo y
Origen) y de un editor de cdigo asociado
en caso de haber escogido la separacin de
cdigo e interfaz (opcin marcada en la
figura anterior).
Del mismo modo estn disponibles para
arrastrar sobre la superficie de diseo los mismos controles web que en el caso de los
formularios Web.

La primera diferencia con una pgina ASPX la encontramos al ver las etiquetas que
constituyen la parte de interfaz de usuario del control. En los formularios aparece al
principio una directiva <%@Page %>, pero en los controles la directiva se llama <
%@Control %> si bien se usa de un modo muy similar:

Figura 3.3.2.- Cdigo origen de un control de usuario sobre el que se han


arrastrado tres controles Web.
Otra diferencia fundamental de un control con una pgina es que hereda de la clase
UserControl y no de Page. Sin embargo ambas clases base heredan a su vez de la
clase TemplateControl, por lo que conservan multitud de caractersticas en comn.

Figura 3.3.3.- Cdigo de la clase code-beside de un control de usuario. en el


que se ve que sta hereda de UserControl .
De hecho la similitud es tal que el entorno de desarrollo le asigna al manejador del
evento Load del control el nombre Page_Load (en lugar de, por ejemplo,
UserControl_Load) como se observa en la figura.

Definicin de la funcionalidad pblica del control de usuario


Todo a partir de ahora es exactamente igual que en el caso de los formularios Web.
Podemos arrastrar cualquier control Web desde el cuadro de herramientas sobre la
superficie del control, asignar sus propiedades y recibir post-backs que generan
eventos en los controles que hemos incluido.
Por supuesto, como en esencia un control de usuario no es ms que una clase de .NET,
podemos extenderla aadindole nuestros propios mtodos y propiedades. Todos los
miembros pblicos que agreguemos estarn disponibles desde la pgina que albergue

al control del mismo modo que lo estn las propiedades y mtodos de cualquier control
Web normal. Esto es muy til para encapsular el acceso a ciertas funcionalidades que
hayamos incluido.
Por supuesto los controles que coloquemos en la superficie del control se vern
adecuadamente en la pgina que lo contenga y se comportarn del modo esperado,
esto es, recibiendo eventos, conservando su estado en el ViewState, etc...

Uso de los controles de usuario


Ahora que ya sabemos crear controles de usuario veamos la forma de usarlos desde
los formularios Web.
El modo ms sencillo de incluir un control de usuario en una pgina ASPX es
simplemente arrastrndolo desde el explorador de proyectos sobre su superficie de
diseo. Esto har que se visualice el control completo dentro de la pgina:

Figura 3.3.4.- Control de usuario arrastrado sobre la superficie de un


formulario Web (los puntos rojos se usan para destacarlo, no estaban en la imagen original).
Nota:
Visual Studio 2010 ofrece un mayor soporte en tiempo de diseo para
los controles de usuario que permite ver el contenido del control y
ajustar sus propiedades desde el explorador de propiedades. En
versiones anteriores de Visual Studio .NET lo nico que se vea de estos
controles era un cuadro de color gris con su nombre y eran por tanto
ms difcil trabajar con ellos y encajarlos en un diseo general.
Cuando observamos el cdigo de la pgina ASPX desde la que estamos utilizando el
control de usuario, vemos que al principio de sta se ha incluido una directiva
Register:

Quiz el atributo ms importante de esta directiva sea el ltimo, TagPrefix. El valor


asignado a l ser el que se utilice para distinguir de manera nica un control de
usuario dentro de la pgina. De este modo se pueden utilizar sin problemas controles
de usuario con el mismo nombre en una misma pgina. As, segn la lnea anterior

podramos definir en la pgina un control del tipo Micontrol usando una sintaxis como
esta:

Las propiedades que hayamos definido para la clase Micontrol se pueden establecer
mediante atributos (al igual que ID en la lnea anterior, por ejemplo) siempre que se
trate de tipos simples.
Podemos modificar la directiva Register para incluir un prefijo que nos guste ms o sea
ms descriptivo que el que Visual Studio ha puesto por defecto.

Carga dinmica de controles de usuario


Otro modo de hacer uso de los controles de usuario es cargarlos dinmicamente segn
los necesitemos. El mtodo LoadControl de la clase Page o del formulario de la pgina
es el que nos va a ayudar a conseguirlo. Slo hay que pasarle como argumento el
nombre del archivo ASCX que contiene la definicin del control de usuario, de modo
similar a este:
Dim c As Control
c = Me.LoadControl("Micontrol.ascx")
Me.Form.Controls.Add(c)

En lugar de usar un tipo genrico (Control) como en este fragmento tambin podemos
usarlo como el verdadero tipo del control y as llamar a sus mtodos y propiedades
antes de aadirlo al formulario:
Dim c As Control
Dim miC As Micontrol
c = Me.LoadControl("Micontrol.ascx")
miC = CType(c, Micontrol)
miC.ValorInicial = "Bienvenido a esta pgina"
Me.Form.Controls.Add(miC)

En este ejemplo hemos usado el control con su verdadero tipo para poder asignar la
propiedad ValorInicial antes de agregarlo a la pgina.

Tcnicas de trabajo y consejos varios


Para finalizar con este intenso mdulo de fundamentos de las aplicaciones ASP.NET
vamos a comentar algunas tcnicas de trabajo comunes que le sern de ayuda en su
quehacer diario.

Tcnicas de trabajo y consejos varios


Navegacin entre pginas
Antes de nada me parece necesario comentar que en las aplicaciones ASP.NET se
utilizan seguramente muchas menos pginas que en el caso de que la misma
aplicacin estuviese escrita con ASP clsico. Esto se debe a que, gracias a los postback y los correspondientes eventos de servidor se encapsula ms la funcionalidad en
un slo archivo. Por ejemplo en una aplicacin ASP 3.0 clsica para recoger los datos
de un usuario con mucha probabilidad escribiramos dos (o incluso tres o cuatro)
pginas: la pgina HTML con el formulario, la pgina ASP a la que se envan los datos
del formulario y puede que una pgina o dos para informar al usuario del xito o del
fracaso de su accin. En ASP.NET todo esto se resolvera con una sola pgina ASPX, un
evento de servidor y probablemente mostrando y ocultando controles Web desde dicho
evento.
Por supuesto una aplicacin estar formada de todos modos por un nmero ms o
menos elevado de pginas a las que se debe dirigir al usuario. Existen diversas
maneras de dirigir a un usuario hacia otra pgina o recurso de la aplicacin.
La primera de ellas, y la ms sencilla, consiste en utilizar controles del tipo HyperLink
que tiene este aspecto en el cuadro de herramientas:
. Estableciendo su
propiedad NavigateUrl estaremos indicando a qu pgina queremos enviar al usuario
cuando pulse sobre el enlace resultante. Si la pgina es una de las que pertenecen a
nuestra aplicacin ser muy fcil seleccionarla gracias al dilogo especial que aparece
para ello:

Figura 3.4.1.- Dilogo de seSeccin de pginas de nuestra aplicacin.


Adems si ajustamos la propiedad Text de este control ese ser el texto que se
muestre para el enlace de la pgina. Es posible utilizar un grfico en lugar de texto
para el enlace si se utiliza la propiedad ImageUrl.
Nota:
Existen controles especializados en crear rboles de navegacin en una
pgina pero por debajo usan enlaces como stos. Los estudiaremos en
un prximo mdulo.
La otra manera de enviar a los usuarios a una pgina propia o ajena consiste en hacer
uso del mtodo Redirect de la clase HttpResponse del contexto de llamada de la
pgina. As podremos controlar desde un evento de servidor a dnde enviaremos al
usuario. Por ejemplo, si queremos enviarlo a una pgina diferente segn lo que haya
escogido en un control de seSeccin podramos escribir algo similar a esto en el evento
de pulsacin de un botn:
If opciones.ListIndex = 0 Then
Response.Redirect("opcion1.aspx")
Else
Response.Redirect("opcion2.aspx")
End If

El mtodo Redirect enva al navegador del usuario una cabecera especial de redireccin
que le indica que, en lugar de descargar los contenidos de la pgina actual, debe
solicitar una nueva. Esto provoca una nueva peticin de pgina desde el navegador por
lo que no es la forma de navegacin de mayor rendimiento (hay el doble de viajes al
servidor que en un enlace directo). Sin embargo dota de gran flexibilidad a la hora de
decidir qu hacer ante la solicitud de pgina de un usuario o para redirigir al final de un
proceso ejecutado en el servidor.

Envo de datos entre pginas


Como hemos visto el comportamiento normal durante la pulsacin de un botn u otro
evento de controles servidor es el de realizar un post-back a la pgina actual. Sin
embargo puede haber ocasiones en las que, por el motivo que sea, se necesita realizar
ese envo de datos a otra pgina diferente, pero eso s, conservando el acceso a todos
los controles y datos de la pgina original (que como sabemos estn contenidos en el
ViewState).
ASP.NET 2.0 ha aadido una nueva funcionalidad denominada Cross Page Posting,
que permite precisamente esto. Para conseguirlo lo nico que hay que hacer es ajustar
la propiedad PostBackUrl del control cuyos eventos queremos gestionar desde otra
pgina asignndole la ruta virtual de sta ltima.
Los datos se reciben en la otra pgina pero todava tenemos acceso a los datos de la
pgina original a travs de la propiedad PreviousPage de la nueva. Se trata de un
objeto Page reconstruido a partir del ViewState recibido. Si la usamos as, de modo
genrico, tendremos que utilizar el mtodo FindControl de la clase Page para localizar
cualquier control que hubiese en la pgina original. Por supuesto si ambas pginas
pertenecen al mismo espacio de nombres (o lo hemos declarado) podemos forzar el
uso de la pgina como la clase original de sta usando CType y acceder directamente a
sus mtodos, propiedades y controles.
Tambin es posible determinar desde una pgina si los datos que est recibiendo son
de su propio Post-back o pertenece a otra pgina mediante la propiedad
IsCrossPagePostBack, que es muy similar a la propiedad IsPostBack que ya hemos
estudiado.
Esta tcnica es de un uso poco frecuente pero se trata de una novedad poco conocida
que me ha parecido interesante incluir aqu.

Transferir el control entre pginas


A veces puede ser til procesar el cdigo de una pgina y justo despus transferir el
control a otra pgina ejecutando tambin su cdigo. El mtodo Transfer de la clase
HttpServer ejecuta dinmicamente el cdigo de una pgina desde otra cualquiera.
La forma de hacerlo es la siguiente:
Server.Transfer("otrapagina.aspx")

Al contrario que el uso de Redirect, Server.Transfer no cambia la URL que el usuario ve


en su navegador ya que desde fuera no se observa ninguna variacin en la pgina
ejecutada. Es una ejecucin en el servidor, sin redireccin en el cliente.
Este mtodo es anlogo al del mismo nombre en ASP clsico, si bien en ASP.NET su
utilidad es menor puesto que, como veremos, existen maneras mucho mejores y ms
recomendables de reutilizar cdigo de uso comn en las pginas.

Reutilizacin de cdigo en una aplicacin


A menudo, al escribir una aplicacin, tenemos necesidades similares en diversas partes
de sta. Por ello sera absurdo escribir una y otra vez el mismo cdigo dentro de los
manejadores, al cargar una pgina y dems eventos. Lo mejor es encapsular el cdigo
en diversos mtodos y llamar a stos cuando sea necesario. Todo esto sonar de
perogrullo a cualquier programador experimentado.
En ASP clsico, por ejemplo, se solan agrupar las funciones de uso comn dentro de
archivos de inclusin que luego se utilizaban en las diferentes pginas gracias a una
directiva <!-- #include -->. Si bien esto constitua una manera bsica de reutilizar
cdigo no ofreca la flexibilidad de un lenguaje capaz de crear bibliotecas de objetos y
mtodos.
En .NET es posible crear nuevas clases que encapsulen funcionalidades comunes y que
sean reutilizables en cualquier punto de la aplicacin. En ASP.NET 2.0 existen una serie
de carpetas con nombres especiales que cuelgan de la carpeta principal de la aplicacin
y que llevan asociado un comportamiento especial. Una de estas carpetas es
'App_Code'. Bsicamente, todo el cdigo que se coloque bajo esta carpeta se
compila de manera automtica.
Tal y como hemos estudiado anteriormente, cuando se solicita una pgina sta se
compila de manera automtica junto con su archivo de "code-beside" de forma que, a
medida que se accede a las diferentes partes de una aplicacin se va compilando por
completo. Dadas las caractersticas de Visual Studio, el cdigo residente en archivos
que no sean pginas o clases parciales de "code-beside" no se compila ya que jams
navegamos por l ni se referencia desde otras pginas. La excepcin a esta regla es el
cdigo que coloquemos en la carpeta App_Code que se compila automticamente al
comenzar la aplicacin.
Por ello, una buena forma de reutilizar cdigo entre pginas es agregar clases
especializadas a la carpeta App_Code. De hecho si presionamos con el botn
secundario sobre el proyecto en el explorador de soluciones y agregamos un nuevo
elemento de tipo Clase se nos mostrar una advertencia diciendo, grosso modo, que
debemos aadirla a App_Code si queremos que funcione. Incluso se crea
automticamente la carpeta si no lo hemos hecho ya con anterioridad:

Figura 3.4.2.- Advertencia para colocar cdigo en App_Code (aplicable a


Visual Studio 2010 superior).
Incluso si intentamos agregar un nuevo elemento a la carpeta App_Code slo se nos
ofrecer la posibilidad de incluir nuevas clases, archivos de texto (para comentarios,
por ejemplo) o DataSets. Estos ltimos son DataSets tipados que no dejan de ser
clases con un diseador asociado como veremos en el siguiente mdulo.
Una vez creadas nuevas clases en estas carpeta podemos aadirle mtodos,
propiedades y campos para dotarlas de la funcionalidad que requiramos. Por supuesto
son clases normales de .NET por lo que podremos derivarlas de otras clases para
obtener funcionalidad "gratis", hacer que implementen interfaces o incluirlas dentro de
mdulos o espacios de nombres para ordenarlas.
Si lo que desea es compartir cdigo entre distintas aplicaciones o encapsular
funcionalidad en una librera independiente, puede crear un proyecto de tipo librera de
clases. Este proyecto genera un archivo .DLL que puede compartir entre distintas
aplicaciones. Con esto podr reutilizar sus clases en tantos proyectos como quiera,
incluso en distintos tipos de proyectos como Aplicaciones Web y Aplicaciones Windows.
Nota:
Si dispone de la versin Visual Web Developer no podr generar
bibliotecas DLL.

También podría gustarte