Está en la página 1de 24

Programacin avanzada en .

NET con C#
Servicio de Informtica

AJAX

ndice
Familiarizarse con Ajax .................................................................................................................. 2
Introduccin .............................................................................................................................. 2
Relacin de controles de AJAX ...................................................................................................... 2
Control ScriptManager .......................................................................................................... 2
Control ScriptManagerProxy ................................................................................................. 3
Control UpdatePanel ............................................................................................................. 3
Control UpdateProgress ........................................................................................................ 6
Control Timer ........................................................................................................................ 6
Ejemplos ........................................................................................................................................ 6
Ejemplo 1 (Update sencillo) .................................................................................................. 6
Ejemplo 2 (Update con UpdateProgress y tipos de disparadores) ...................................... 7
Ejemplo 3 (disparador con FileUpload) ................................................................................. 8
Ejemplo 4 (varios updatePanel y el timer) ............................................................................ 9
Anidando UpdatePanels. ............................................................................................................. 10
Ejemplo 5............................................................................................................................. 10
Instrucciones para el control de llamadas asncronas ........................................................ 13
Ejercicio 1. ................................................................................................................................... 14
Uso de AJAX Avanzado ................................................................................................................ 16
Ejemplo 5 (actualizar un control fuera del UpdatePanel): ...................................................... 16
Ejemplo 6 (Autoarranque y barra de progreso por programacin): ....................................... 18
Cancelacin de actualizaciones de UpdatePanel .................................................................... 19
Varios UpdatePanels ............................................................................................................... 20
Ejercicio 2. ................................................................................................................................... 21
AJAX Control ToolsKit .................................................................................................................. 22
ValidatorCalloutExtender ........................................................................................................ 23
Ejemplo 7 (Callout) .................................................................................................................. 24

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Familiarizarse con Ajax


Introduccin
El modelo estndar de trabajo hasta ahora con ASP.NET ha sido utilizar el modelo postback
conde las pginas estn perpetuamente reenvindose al servidor web y regenerndose. Esto
conlleva la desventaja de que se reenvan todos los datos al servidor, adems de un incmodo
parpadeo.
La nueva generacin de aplicaciones web utiliza un conjunto de prcticas de diseo y
tecnologas conocidas como Ajax cuya caracterstica fundamental es la capacidad para
actualizar parte de la pgina, mientras que deja el resto intacto.
AJAX son las siglas de Asynchronous JavaScript And XML. No es un lenguaje de programacin
sino un conjunto de tecnologas (HTML-JavaScript-CSS-DHTML-PHP/ASP.NET/JSP-XML) que nos
permiten hacer pginas de internet ms interactivas.
La caracterstica fundamental de AJAX es permitir actualizar parte de una pgina con
informacin que se encuentra en el servidor sin tener que refrescar completamente la pgina.
De modo similar podemos enviar informacin al servidor.
Vamos a sorprendernos al ver que ASP.Net esconde la complejidad de Ajax y permite una fcil
transicin entre aplicaciones web tradicionales y el nuevo modelo.

Relacin de controles de AJAX

Control ScriptManager
El control ScriptManager administra el script de
cliente de las pginas web ASP.NET habilitadas
para AJAX. De forma predeterminada, el control
ScriptManager registra el script de Microsoft Ajax
Library con la pgina. Esto permite al script de
cliente usar las extensiones del sistema de tipos y
admitir caractersticas como la representacin
parcial de pginas y las llamadas a servicios Web.
Ms adelante veremos cmo ampliar el javascript
de manera que slo acte en la parte de pgina
que se carga por AJAX y los posibles usos.
Hay una propiedad a destacar: el tiempo que debe esperar la pgina de ASP.NET que hace la
llamada antes de dar un timeScriptOut. Por defecto son 90 segundos. Si deseamos ampliar
este tiempo usaremos:
2

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
AsyncPostBackTimeOut="36000"

Donde 36000 son segundos. Ahora dejamos que el timeScriptOut lo del IIS.

Control ScriptManagerProxy
El control ScriptManagerProxy permite que los componentes anidados, como pginas de
contenido (content pages) y controles de usuario, agreguen a las pginas referencias a scripts
y servicios cuando ya se ha definido un control ScriptManager en un elemento primario (como
por ejemplo en un master page). Una pgina web slo puede contener un control
ScriptManager, bien de forma directa en la propia pgina, o de forma indirecta en un
componente anidado o primario. El control ScriptManagerProxy permite agregar scripts y
servicios a pginas de contenido y controles de usuario donde la pgina maestra o la pgina
host ya contienen un control ScriptManager.
El control ScriptManagerProxy requiere configuracin especfica en un archivo web.config para
funcionar correctamente. Si intenta trabajar con este control y el sitio web no contiene el
archivo web.config necesario, los errores aparecen en la vista Diseo de la pgina donde
podra haber aparecido el control. En la vista Diseo, si hace clic en el control que est en ese
estado, Microsoft Expression Web le ofrecer la opcin de crear o actualizar el archivo
web.config.

Control UpdatePanel
Los UpdatePanel permiten generar aplicaciones web
enriquecidas y centradas en el cliente. Estos controles
permiten actualizar las partes seleccionadas de una pgina
en lugar de actualizar toda la pgina con una devolucin de
datos. Esto se conoce como actualizacin parcial de la
pgina. Una pgina web ASP.NET que contiene un control
ScriptManager (esto es obligatorio) y uno o varios controles
UpdatePanel puede participar automticamente en
actualizaciones parciales de la pgina, sin un script de
cliente personalizado.
Ver ejemplo 1.

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Distinguimos 2 tipos de disparadores segn desde donde acten:
-

Disparador dentro del updatePanel. Simplemente:


protected void BotonDentro_Click(object sender, EventArgs e)
{
Thread.Sleep(10000);
Foto.ImageUrl = "foto.jpg";
}

Disparador fuera de updatePanel.

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Ver ejemplo 2.
Distinguimos 2 tipos de disparadores fuera de updatePanel segn cmo acten:

Los disparadores pueden ser asncronos a sncronos.


Lo normal es crear disparadores asncronos (AsyncPostBackTrigger).
Si creamos un disparador sncrono (PostBackTrigger) lo que conseguimos es hacer un postback
normal sobre la misma pgina actuando tambin dentro del UpdatePanel.
Esto es interesante con controles del tipo FileUpload, puesto que solo funcionaran si usamos
el trigger PostBackTrigger.
Ver ejemplo 3.
Existe una propiedad importante: UpdateMode. UpdateMode puede valer1:

Always: el contenido del UpdatePanel ser siempre ser renderizado cada vez que se
invoque un postback, independientemente que sea el mismo UpdatePanel.

Conditional: el UpdatePanel solo se renderizara cuando en los siguientes escenarios: un


control hijo del UpdatePanel invoca un postback, se registra un trigger a evento de algn
control que no se encuentra fuera del UpdatePanel, se llama al mtodo Update del
control UpdatePanel manual mente.

Ver ejemplo 4.

http://www.frameworkla.net/?post=Modos+de+actualizaci%C3%B3n+del+UpdatePanel#/Post/Modos%
20de%20actualizaci%C3%B3n%20del%20UpdatePanel
5

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Control UpdateProgress
Si una pgina contiene controles UpdatePanel
tambin puede incluir controles
UpdateProgress para mantener a los usuarios informados sobre el estado de las
actualizaciones parciales de pgina.
Puede usar un control UpdateProgress de dos formas diferentes: una para representar el
progreso de las actualizaciones parciales de la pgina entera y otra para representar el
progreso de un solo control UpdatePanel.
Ms adelante veremos con inyectar javascript en estos controles.
Ver ejemplo 2.

Control Timer
El control Timer de Microsoft Ajax realiza postbacks a intervalos definidos. Si utiliza el control
Timer con un control UpdatePanel, puede habilitar actualizaciones parciales de pgina en un
intervalo definido. Tambin puede utilizar el control Timer para enviar toda la pgina.
Tambin se puede utilizar este control como disparador (<trigger>) de uno o varios
UpdatePanels.
Ver ejemplo 4.

Ejemplos
Ejemplo 1 (Update sencillo)

Crea un nuevo proyecto web y un nuevo elemento (un nuevo web form). Crea la estructura
que se muestra. En ella puedes observar:

Un ScriptManager.
Un label (ID=fuera), una caja de texto (ID=TextFuera), un label de resultado
(ID=ResultadoFuera) y un botn (ID=BotonFuera).

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Un separador (<hr>)
Un panel con fondo gris y borde. Dentro del panel hay un updatePanel.
Dentro de updatePanel ponemos: Un label (ID=dentro), una caja de texto
(ID=TextDentro), un label de resultado (ID=ResultadoDentro) y un botn
(ID=BotonDentro).
Dentro de updatePanel ponemos una imagen pequea (para el ejemplo2) (ID=Foto).

En la clase asociada solo utilizamos el evento Page_Load:


protected void Page_Load(object sender, EventArgs e)
{
this.ResultadoDentro.Text += this.TextDentro.Text;
this.ResultadoFuera.Text += this.TextFuera.Text;
}

Y al ejecutar vemos la diferencia que hay de usar un botn u otro.

Ejemplo 2 (Update con UpdateProgress y tipos de disparadores)


Vamos a cargar el UpdatePanel con un disparador.
El objetivo es que al pulsar sobre cualquier botn se cargue una imagen grande y remota que
reemplace a la pequea (ID=Foto) que tenemos dentro de UpdatePanel.
Para hacer la prueba usamos que simula una tardanza de 10 segundos.
Thread.Sleep(10000);

Una ayuda visual para el usuario de manera que vea que en la pgina est pasando algo lo
logramos con un updateProgress.
<asp:UpdateProgress ID="UpdateProgress1" runat="server"
AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
<asp:Image ID="Image1" runat="server" ImgUrl=cargando.gif />
</ProgressTemplate>
</asp:UpdateProgress>

Pero podemos observar que este aviso slo funciona cuando actualizamos el UpdatePanel con
el disparador de dentro (BotonDentro). Para que funcione con el otro botn tendremos que
recurrir a inyectar Javascript en el ScriptManager tal y cmo se explica ms adelante.

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Dos propiedades a destacar son DisplayAfter que sirve
para que UpdateProgress ocupe siempre el mismo espacio y
no se contraiga cuando no se llama.
O DisplayAfter muy til para evitar molestos parpadeos
cuando se usa con un control Timer por ejemplo.

Ejemplo 3 (disparador con FileUpload)


La nica forma de hacer que esto funcione:

<form id="form1" runat="server">


<div>
<asp:Label ID="Label2" runat="server" Text="Label">
</asp:Label>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Label ID="Label1" runat="server" Text="Label">
</asp:Label>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
</div>
<asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" />
</form>

Es usando PostBackTrigger.
Echando un vistazo a la programacin en C#:
using System;
public partial class Default_8 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
{
Label2.Text = DateTime.Now.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
String savePath =
@"C:\trabajo\Dropbox\_c_av_2ed\pruebas\ejemplo\";
if (FileUpload1.HasFile)
{
String fileName = FileUpload1.FileName;
savePath += fileName;
FileUpload1.SaveAs(savePath);
Label1.Text = "Se guard el fichero " + fileName;
}
else
{
Label1.Text = "Indica un nombre para el fichero.";
}
}
}

Ejemplo 4 (varios updatePanel y el timer)

Aadimos a nuestro ejemplo otro UpdatePanel.

Aadimos un label: <asp:Label ID="Label1" runat="server" Text="Su


hora:

">

Aadimos otro label: <asp:Label ID="LaHora" runat="server" Text="">


Dentro aadimos un control Timer que funcione cada 600 milisegundos. Haciendo
doble click sobre el control Timer creamos el evento que se deber ejecutar cada 600
milisegundos, que muestre la hora en el label LaHora.
LaHora.Text = DateTime.Now.ToString();

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
<asp:Panel ID="Panel2" runat="server" BackColor="#99CCFF">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Su hora:
</asp:Label>
<asp:Label ID="LaHora" runat="server" Text="">
</asp:Label>
<asp:Timer ID="Timer1" runat="server" Interval="600"
ontick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>

">

Observar el comportamiento de la pgina. Cambiar la propiedad UpdateMode en ambos


UpdatePanels a condicional y volver a observar cmo cambia el comportamiento.

Anidando UpdatePanels2.
En algunos escenarios, la anidacin de los controles UpdatePanel permite proporcionar
funcionalidad de interfaz de usuario que sera difcil proporcionar de otra forma. Los paneles
anidados son tiles si desea actualizar separadamente regiones concretas de la pgina y
actualizar al mismo tiempo varias regiones. Esto se puede lograr si establece la propiedad
UpdateMode de los controles externo y anidado en Conditional. De esta forma, el panel
externo no actualiza la regin de su pgina si slo se actualiza el panel interno. Sin embargo, si
se actualiza el panel externo, tambin se actualizan los paneles anidados.

Ejemplo 5

http://msdn.microsoft.com/es-es/library/bb398867.aspx
10

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Anidamos 2 updatePanels:

Ambos tendrn la propiedad de UpdateMode a Conditional.


El de arriba se llamar updatePanelSuperior y contiene una imagen, un label y un
button, adems del otro updatePanel.
El de abajo se llamar updatePanelInferior y contiene una imagen, un label y un
button.

Se han aadido adems 3 updateProgress, uno sin asociar a nada, otro asociado a
UpdatePanelSuperior y otro a UpdatePanelInferior.

Ya podemos aadir programacin:


protected void ButtonInferior_Click(object sender, EventArgs e)
{
programacion();
}
protected void ButtonSuperior_Click(object sender, EventArgs e)
{
programacion();
}
private void programacion()
{
Thread.Sleep(1000);
ImageSuperior.ImageUrl = "img/foto.jpg";
ImageSuperior.Width = 600;
HoraSuperior.Text = DateTime.Now.ToString();
ImageInferior.ImageUrl = "img/foto2.jpg";
ImageInferior.Width = 600;
HoraInferior.Text = DateTime.Now.ToString();
}

Si pulsamos sobre el botonInferior:

11

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Si pulsamos sobre el superior:

12

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Instrucciones para el control de llamadas asncronas


Para comprobar si la pgina est haciendo un postback usamos:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
programacion();
}
}

Para comprobar que el postback es asncrono, entonces usamos:


protected void Page_Load(object sender, EventArgs e)
{
if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
{
programacion();
}
}

Tambin podemos forzar que un updatePanel se actualice usando update():


private void programacion()

13

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
{
Thread.Sleep(10000);
ImageSuperior.ImageUrl = "img/foto.jpg";
ImageSuperior.Width = 600;
HoraSuperior.Text = DateTime.Now.ToString();
ImageInferior.ImageUrl = "img/foto2.jpg";
ImageInferior.Width = 600;
HoraInferior.Text = DateTime.Now.ToString();
UpdatePanelSuperior.Update();
}

Ejercicio 1.
A partir de estas clases que se te entregan resuelve el problema.

Se pide una web que muestre en un primer momento:

14

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Si seleccionamos una localizacin se aplica un filtro de


manera que las personas que se muestran son las que
trabajan en esa localizacin. Se pide que no se recargue la
pgina entera.

Si seleccionamos una persona se muestra la ficha de la


persona. Se pide que no se recargue la pgina entera.

Suponemos que la carga de los datos acarrea algo de tiempo.


Para que al pulsar la pgina no de la sensacin de no hacer
nada se piden 3 indicadores de progreso:

Cuando la pgina est haciendo algo


Cuando se estn actualizando las personas o la ficha
de persona.
Cuando se est actualizando la ficha de persona.

Se ha asociado un pgina CSS para cuidar el formato. Para que un UpdateProgress se pueda
poner a la altura de un label se debe meter en un panel y asociarle un estilo que tenga float:
left.
Una vez terminada enviar por mail en un fichero comprimido llamado Nombre_Ajax01 para la
evaluacin del curso.

15

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Uso de AJAX Avanzado3


Si en una pgina normal quisiramos inyectar algo de cdigo javascript que se ejecutar al
arrancar la pgina usaramos:
protected void Page_Load(object sender, EventArgs e)
{
string _script = "";
_script += "alert('Ejecutado');";
Page.ClientScript.RegisterStartupScript(
this.GetType(), "myscript", _script, true);
}

Si usamos AJAX este cdigo slo se ejecutara una vez. Pero y si quisiramos ejecutar una
funcin de javascript cada vez se ejecutara un AJAX?
Esta funcin se ejecutar al cargar la pgina y cada vez que usemos AJAX:
protected void Page_Load(object sender, EventArgs e)
{
string _script = "";
_script += "alert('Ejecutado');";
ScriptManager.RegisterStartupScript(
this,this.GetType(),"myscript",_script,true);
}

Esta funcin se ejecutar SOLO al usar AJAX:


protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
string _script = "";
_script += "$get('Resultado').innerHTML += 'Ejecutado';";
ScriptManager.RegisterStartupScript(
this, this.GetType(), "myscript", _script, true);
}
}

Ejemplo 5 (actualizar un control fuera del UpdatePanel):


Dada esta pgina:

http://msdn.microsoft.com/es-es/magazine/cc163354.aspx
16

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Buscamos que cada vez que ocurra una actualizacin AJAX se refleje este cambio en una
etiqueta resultado que est fuera de los UpdatePanel. Este es el cdigo asociado:
public partial class Default_5 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
string _script = "";
_script += "$get('Resultado').innerHTML += 'Ejecutado';";
ScriptManager.RegisterStartupScript(
this, this.GetType(), "myscript", _script, true);
}
}
protected void ButtonArriba_Click(object sender, EventArgs e)
{
Thread.Sleep(1000);
txtArriba.Text += "Pulsado arriba";
}
protected void ButtonAbajo_Click(object sender, EventArgs e)
{
Thread.Sleep(1000);
txtAbajo.Text += "Pulsado abajo";
}
}

Pero nuestro objetivo no es que aparezca cualquier texto, sino que ponga un texto
personalizado en funcin de lo que ha actualizado.
Entonces necesitamos por un lado hacer la llamada a una funcin de Javascript y por otro lado
tener registrado el cdigo de Javascript.
Para hacer la llamada usamos ScriptManager1.RegisterDataItem:
protected void ButtonArriba_Click(object sender, EventArgs e)
{
Thread.Sleep(1000);
txtArriba.Text += "Pulsado arriba";
ScriptManager1.RegisterDataItem(Resultado, txtArriba.Text);
}

17

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Resultado es el nombre del control que se pasa a Javascript y txtArriba.Text es el
valor que estamos pasando, en este caso un string.

Por otro lado creamos un fichero .js (mi.js) con el cdigo Javascript que consideramos
necesario. En este caso buscamos en el cdigo el ID resultado e insertamos como contenido
html el que me llega en el array args
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(MiFuncio
n);
function MiFuncion(sender,args){
$get('Resultado').innerHTML =
args.get_dataItems()['Resultado'];
return;
}

Y se lo aadimos a nuestra pgina:


<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="mi.js" />
</Scripts>
</asp:ScriptManager>

Ejemplo 6 (Autoarranque y barra de progreso por programacin):

Puede ocurrir que nuestra pgina sea extremadamente pesada de cargar y deseamos mostrar
un pequeo mensaje al usuario mientras que el resto de la pgina se carga. Para ello deseamos
que un UpdatePanel se ejecute nada ms arrancar la pgina Cmo lo hacemos?
Necesitamos, como en el ejemplo 5 un .js.
Sys.WebForms.PageRequestManager.getInstance().
add_initializeRequest(Inicia);
Sys.WebForms.PageRequestManager.getInstance().
add_endRequest(Finaliza);
var elementoPostBack;
function Inicia(sender, args) {
elementoPostBack = args.get_postBackElement().id;
if (elementoPostBack == 'ButtonArriba')
$get('UpdateProgressArriba').style.display = 'block';
}
function Finaliza(sender, args) {
if (elementoPostBack == 'ButtonArriba')
$get('UpdateProgressArriba').style.display = 'none';
}

18

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
Y en el .cs
public partial class Default_6 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "xx",
"$get('ButtonArriba').click();", true);
}
protected void ButtonArriba_Click(object sender, EventArgs e)
{
Thread.Sleep(10000);
txtArriba.Text += "Pulsado arriba";
}
}

Otra forma de autoarrancar sera en lugar de


Page.ClientScript.RegisterStartupScript(this.GetType(), "xx", "$get('ButtonArriba').click();",
true);
Sera:
Page.ClientScript.RegisterStartupScript(this.GetType(), "xx", "
__doPostBack('ButtonArriba','Hola');", true);

Donde el primer argument sera el disparador (en nuestro caso ButtonArriba) y el segundo
seran los argumentos.
Para rescatar los argumentos desde C#:
protected void ButtonArriba_Click(object sender, EventArgs e)
{
string _argumento = Request.Params.Get("__EVENTARGUMENT");
txtArriba.Text += _argumento;
}

Para ms informacin:
http://aspalliance.com/895_Understanding_the_JavaScript___doPostBack_Function.all

Para ver el resto de los miembros de la clase de Javascript


Sys.WebForms.PageRequestManager

http://msdn.microsoft.com/es-es/library/bb311028.aspx

Cancelacin de actualizaciones de UpdatePanel


El evento pageLoaded es uno de los que desencadena la clase PageRequestManager cuando
un UpdatePanel regresa al servidor para actualizar su contenido. Otro evento importante que

19

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
desencadena PageRequestManager es initializeRequest, que tiene lugar antes de que se
produzca una devolucin de llamada asincrnica.
El segundo parmetro que se transmite a un controlador de initializeRequest es un objeto del
tipo initializeRequestEventArgs. Este objeto contiene un mtodo get_postBackElement que
identifica el botn o el elemento que ha desencadenado la actualizacin. Tambin dispone de
un mtodo set_cancel que se puede usar para cancelar una devolucin de llamada antes de
que ocurra. Este es un ejemplo del mtodo set_cancel en accin:
<script type=text/javascript>
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(inicia);
function inicia(sender, args)
{
args.set_cancel(!confirm(Seguro?));
}
</script>

En este ejemplo, antes de que se ejecute una devolucin de llamada, un controlador de


intializeRequest abre un cuadro de confirmacin que pregunta al usuario si debe continuar la
actualizacin. Al hacer clic en Cancelar en el cuadro de confirmacin, se transfiere true a
set_cancel, lo que detiene en seco la devolucin de llamada.
En la vida real, probablemente no le interesa pedir confirmacin al usuario antes de permitir
que contine una actualizacin pero podra ser til tener la posibilidad de cancelar una
actualizacin en funcin de las condiciones que existan en otras partes de la aplicacin.

Varios UpdatePanels
Una pgina puede contener varios UpdatePanels. De forma predeterminada, cuando se
actualiza un UpdatePanel en una pgina, los dems UpdatePanel de la pgina tambin se
actualizan. A veces esto ser lo que quiera pero, pero con frecuencia, no necesitar que se
actualicen todos los UpdatePanel como respuesta a la actualizacin de otros UpdatePanel.
Puede elegir las instancias de UpdatePanel que desee actualizar (y cundo) si establece en
"Condicional" la propiedad de UpdateMode de cada control UpdatePanel de la pgina.
A continuacin, cuando se actualice un UpdatePanel y ste llame a un controlador de eventos
del cliente, llame a UpdatePanel.Update en los dems paneles que desee actualizar. De este
modo se reduce la carga en el servidor, al disminuir el nmero de controles que se
representan, y se reduce el volumen de datos de la respuesta porque los UpdatePanel que no
se actualicen no agregarn nada a la respuesta.

20

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Ejercicio 2.
Crea una pgina con un texto introductorio que al arrancar cargue por AJAX 3 imgenes
remotas y que las muestre.
Debe aparecer abajo un control Label que indique el tiempo que ha durado la carga (se usa
el objeto System.Diagnostics.Stopwatch).
Adems, mientras se est cargando aparecer un mensaje de cargando.
Una vez terminada enviar por mail en un fichero comprimido llamado Nombre_Ajax02 para la
evaluacin del curso.

21

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

AJAX Control ToolsKit4


ToolsKit contiene una serie de controles Web y extendedores con los que podremos utilizar las
avanzadas caractersticas de ASP.NET AJAX sin ms que un arrastre de ratn. Del mismo modo,
con su descarga disponemos de ejemplos de uso, as como del propio cdigo fuente de los
controles.
Vamos a distinguir entre controles Web y extendedores, donde los primeros tienen una
entidad por s mismos, mientras que los segundos nicamente aaden un comportamiento a
un control Web existente.
Se trata de una serie de pequeas funcionalidades que cualquier webmaster, en su historia de
programador, ha utilizado o deseado para sus Webs. La diferencia ahora es que los ejemplos
son 100% AJAX y usarlos no exige conocimiento alguno sobre AJAX, javascript o XML.

Para instalar:
Desde la Web donde se centraliza el trabajo sobre el ASP.NET
AJAX Control Toolkit, en su apartado de descargas:
http://ajaxcontroltoolkit.codeplex.com/releases/view/74023
Podemos elegir entre descargarnos o no el cdigo fuente junto
con el resto del Kit. Nosotros elegiremos la opcin en que lo
tiene. Seguiremos a continuacin los siguientes pasos:
1.- Aceptar los trminos y condiciones tras haberlos ledo y
guardar el archivo AjaxControlToolkit.zip en nuestro ordenador.
2.- Descomprimir el fichero. Podemos observar los directorios:
en uno se ubica el cdigo fuente, en otro su correspondiente
binario, templates, etc. La carpeta SampleWebSite contiene
un proyecto con ejemplos especficos de cada uno de los
controles que componen esta versin del ASP.NET AJAX Control
Toolkit.
3.- Ahora iniciemos el Visual Studio. Elegimos crear un nuevo
WebSite.
4.- Vamos a aadir los controles del ASP.NET AJAX Control
Toolkit a nuestra caja de herramientas. Para ello, una vez
dentro de cualquiera de nuestras pginas (por ejemplo
default.aspx), presionamos el botn derecho sobre nuestra caja
de herramientas para elegir Add Tab (agregar ficha). Con ello,
crearemos un tab especfico en nuestra caja de herramientas

http://www.es-asp.net/tutoriales-asp-net/tutorial-0-5312/asp-net-ajax-control-toolkit.aspx
22

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX
para el ASP.NET AJAX Control Toolkit. Y le llamamos (por ejemplo) ASP.NET AJAX Control
Toolkit.
5.- Desplegamos nuestro nuevo tab y de nuevo recurrimos al botn derecho y elegimos
Choose tems...(elegir elementos) Desde el botn de Browse... (examinar) buscamos la
carpeta donde hemos descomprimido nuestro ASP.NET AJAX Control Toolkit. Elegimos
AjaxControlToolkit.dll y presionamos sobre open.
Y a los tenemos instalados. Estos controles van desde un simple botn con una alerta
asociada, hasta un complejo panel que podemos arrastrar por la pantalla; en ambos casos,
mandando y recogiendo informacin entre el cliente y el servidor sin ningn tipo de recarga de
pgina. Su uso har que nuestra Web sea mucho ms atractiva y simptica al usuario a la par
que potente y efectiva.
Para saber que es y cmo funciona acudiremos a la web
http://www.es-asp.net/tutoriales-asp-net/tutorial-5312-5317/controles-y-extendedores.aspx
http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/asyncfileupload/asyncfileuploa
d.aspx

(Ejemplo) ValidatorCalloutExtender
El ValidatorCallout es un extendedor de cualquier tipo de validador (RequiredFieldValidator,
RangeValidator, CustomValidator...), con el que conseguimos una vista mucho ms amable de
los tpicos validadores.
No tenemos que aplicar los validadores como lo hemos hecho hasta ahora, pero con el detalle
de aadirles el atributo Display=None y asignarles el ValidatorCalloutExtender.
Para que funcione correctamente, en lugar de poner
<asp:ScriptManager ID="ScriptManager1"
runat="server"></asp:ScriptManager>

hay que poner


<asp:ToolkitScriptManager
ID="ToolkitScriptManager1"
runat="server"></asp:ToolkitScriptManager>

23

Programacin avanzada en .NET con C#


Servicio de Informtica

AJAX

Propiedades
TargetControlID: ID del Validador que se est extendiendo.
Width: Anchura del Callout
HighlightCssClass: Opcionalmente se puede asignar una clase CSS sobre el Callout.
WarningIconImageUrl: Url del icono que muestra la alerta. Si no se especifica se muestra el
que viene por defecto.
CloseImageUrl: Imagen que produce el cierre del Callout

Ejemplo 7 (Callout)
<body>
<form id="form1" runat="server">
<div>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1"
runat="server">
</asp:ToolkitScriptManager>
<asp:TextBox ID="TextBox1" runat="server">
</asp:TextBox>
<asp:RegularExpressionValidator
ID="RegularExpressionValidator1" runat="server"
ErrorMessage="Un nmero por favor"
ControlToValidate="TextBox1" Display="None"
ValidationExpression="[0-9]+">
</asp:RegularExpressionValidator>
<asp:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" runat="server"
TargetControlID="RegularExpressionValidator1"
</asp:ValidatorCalloutExtender>
</div>
</form>
</body>

24

>

También podría gustarte