Just another WordPress.com site

Ajax en tiempo real(Conclusion)

Sorprendentemente, se puede asumir el temporizador casi de la misma forma que en una aplicación Windows.

    protected void tmrServerTime_Tick(object sender, EventArgs e)
    {
       
this.txtServerTime.Text = DateTime.Now.ToString("dd/MM/yy hh:mm:ss"
);
   
}

C#: DiferenciaHoraria_Atlas_CS.aspx.cs

    Protected Sub tmrServerTime_Tick (ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrServerTime.Tick
       
Me.txtServerTime.Text = DateTime.Now.ToString("dd/MM/yy hh:mm:ss"
)
    
End Sub

VB.NET: DiferenciaHoraria_Atlas_VB.vb

Ahora, si bajamos este esquema de Atlas, quisiéramos leer el tiempo del cliente para hacer algo con él; por ejemplo, reportar la hora de la visita de un cliente. La cuestión no es tan simple. No obstante, el código que se muestra a continuación lo hace posible. Primero, complementamos el código HTML anterior con unos Scripts:

<html xmlns="http://www.w3.org/1999/xhtml" >
<
head id="Head1" runat
="server">
    <title>Tiempo del Servidor con Atlas</title
>
</head
>
<
body
>
    <form id="form1" runat
="server">
        <h2>Tiempo del Servidor con Atlas</h2><hr
/>
        <div
>
            <atlas:ScriptManager runat="server" ID
="sm"
                               
 EnablePartialRendering="true"
/>
            <atlas:TimerControl runat="server" ID="tmrServerTime"

                               
Interval="1500" OnTick="tmrServerTime_Tick" />

           
<atlas:UpdatePanel ID="up1" runat
="server">
            <Triggers
>
            <atlas:ControlEventTrigger ControlID
="tmrServerTime"
                                      
EventName="Tick" />
 
           
</Triggers>

           
<ContentTemplate
>
            <asp:TextBox ID="txtServerTime" runat="server" Width="220px"
/>
            </ContentTemplate>

            
</atlas:UpdatePanel>

           
</div
>
            <div
>
            <input id="txtClientTime" type="text" style
="width: 220px"
                 
 runat="server" />

           
</div><hr
/>
    </form
>
</
body
>
</
html
>
<
script type="text/javascript" src="ClientTime.js"></script
>
<
script type
="text/javascript">
function
showClientTime()
{
   
//run after postback
    t = clientTime();
   
var r = document.getElementById("txtClientTime"
);
   
r.value = t;
}
   
// tip source: http://forums.asp.net/thread/1274000.aspx   
function
PageRequestManagerPropertyChanged(sender, args)
{
   
if (args.get_propertyName() == "inPostBack"
)
    {
       
if (!$object("_PageRequestManager"
).get_inPostBack())
            showClientTime();
    }
}
function
pageLoad()
{
    $object(
"_PageRequestManager"
).propertyChanged.add(
           
PageRequestManagerPropertyChanged);
}
</script>  

Complemento a código Atlas para leer el tiempo del cliente

Para leer el tiempo del cliente tenemos que incluir nuevamente ClientTime.js ¿Queda demostrado que usar la directiva src es la manera más eficaz de reutilizar código de JavaScript? Sin duda.

La función PageRequestManagerPropertyChanged habilita a la página para que después de un PostBack, parcial o completo, se llame una función del código del cliente. En este caso llamamos a showClientTime, la cual actualiza el dato deseado. Una función como PageRequestManagerPropertyChanged usa sintaxis exclusiva de Atlas.

Otro interesante detalle aquí es que agregamos un cuadro de texto HTML con un el atributo runat=Server. Esto nos permite leer el valor del control HTML desde el código del servidor. Por ejemplo:

    protected void tmrServerTime_Tick(object sender, EventArgs e)
    {
       
this.txtServerTime.Text = DateTime.Now.ToString("dd/MM/yy hh:mm:ss"
);
       
       
// podemos leer el tiempo del cliente en virtud de runat=server
        string ClientTime = this
.txtClientTime.Value;
    }

C#: DiferenciaHoraria_Atlas_CS.aspx.cs

    Protected Sub tmrServerTime_Tick (ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrServerTime.Tick
      
Me.txtServerTime.Text = DateTime.Now.ToString("dd/MM/yy hh:mm:ss"
)

        // podemos leer el tiempo del cliente en virtud de runat=server
       Dim ClientTime As String
= Me.txtClientTime.Value
   
End Sub

VB.NET: DiferenciaHoraria_Atlas_VB.aspx.vb

7. Conclusión

AJAX puro, basado en callbacks de ASP.NET 2.0 no es simple. Se deben seguir varias reglas para cumplir un objetivo. No obstante, si centramos una estrategia de nombres podemos simplificar la complejidad. En realidad, si queremos afirmar que programamos AJAX, deberíamos entender la teoría del asunto. Quizás haya problemas que aún no cubra Atlas. He encontrado que manejar gráficos puede ser más eficiente con Callback, aunque por la fuerte evolución de AJAX, prefiero no asumir esta afirmación formalmente.

Atlas brinda un modelo de programación muy flexible, no obstante existe una curva de aprendizaje conceptual no muy suave. Si se desea cuestiones avanzadas vamos a tener que recurrir al duro JavaScript.

Queda sentada la base para un sistema Web que ejecute en tiempo real y con grandes posibilidades de una interfaz de usuario rica. ahora si acabamos

8. Referencias

AJAX un nuevo acercamiento a Aplicaciones Web

Implementing Client Callbacks Without Postbacks in ASP.NET Web Pages

ASP.NET “Atlas”

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.