ScriptManager y ClientScript en ASP.NET Ajax

Uno de los cambios que se han dado dentro de asp.net ajax es la generación de javascript en el lado del servidor, y es que sucede que ahora uds. encontrarán van a encontrar los diversos métodos que se tienen dentro del “Page.ClientScript” tambien definidos dentro de la clase “Microsoft.Web.UI.ScriptManager”.

En si esto como que es un poco confuso, pongamos un ejemplo, que tal si Uds. Quisieran desarrollar un Custom Control en el cual tuvieran la necesidad de Registrar un Control Hidden, normalmente realizarían lo siguiente:

  1 Page.ClientScript.RegisterHiddenField(this.ID, “”);

Esa es la forma tradicional de registrar el Hidden, ahora si ese control es usada en una página aspx que se basa en postbacks funcionaria de manera correcta, pero que sucede si se usara en una página basada en partial postbacks, con asp.net ajax como motor asíncrono, pues la respuesta es sencilla, simplemente no generaría el control Hidden, asi que si están teniendo este pequeño problema no se preocupen aca tenemos una alternativa 🙂

Esto es debido a que si uds quieren utilizar estos métodos en una página basada en asp.net ajax deben usar los métodos que vienen dentro de “Microsoft.Web.UI.ScriptManager” ahora también recuerden que dentro de una página basada en ajax también existe la posibilidad de hacer postbacks, por lo tanto una posible solución basada en código sería la siguiente:


 

  1 if (Microsoft.Web.UI.ScriptManager.GetCurrent(this.Page) != null){
2 if (Microsoft.Web.UI.ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack){
3 Microsoft.Web.UI.ScriptManager.RegisterHiddenField(this, this.ID, “”);
4 }
5 else{
6 Page.ClientScript.RegisterHiddenField(this.ID, “”);
7 }
8 }
9 else{
10 Page.ClientScript.RegisterHiddenField(this.ID, “”);
11 }


 


Lo que hacemos en este snippet es primero, verificar si existe algun control ScriptManager dentro de la página, de esta forma descartamos si estamos usando o no asp .net ajax, en caso no exista entonces no es una pagina aspx que use ajax, por consiguiente un simple Page.ClientScript.RegisterHiddenField estaría OK.

El otro caso es que si este usando un control ScriptManager, ya que esto nos obliga a verificar si esta en un postback normal o en un “partial postback”, para ello usamos la propiedad “IsInAsyncPostBack” del ScriptManager actual, si la respuesta es verdadera implica que estamos en un partial Postback por lo que para registrar el control Hidden ahora requerimos usar el método dentro de la clase ScriptManager, de la siguiente manera:
 

  1 Microsoft.Web.UI.ScriptManager.RegisterHiddenField(this, this.ID, “”);


En caso la respuesta sea incorrecta entonces solo usamos un simple Page.ClientScript.RegisterHiddenField.


 


Espero sea de utilidad para Uds. a mi me ayudo en el momento de migrar a la ultima version de asp.net ajax.

Saludos cordiales,

Ivan Mostacero.

http://www.msdnlive.net/

5 comentarios en “ScriptManager y ClientScript en ASP.NET Ajax”

  1. Uff, estuve muy extrañada porque yo tambien tenia un problema asi, pero bueno, ahora ya puedo saber el porque, me servirá en el futuro. Gracias!!

  2. El tip es excelente, pero que pasa cuando tengo una funcion que tiene una variable array que debo de actualizar dependiendo de ciertos filtros de datos. ¿Puedo volver a registrar nuevamente la funcion con elnuevo array?

    Saludos

    Eriberto Correa

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *