ASP.NET – Invocar JavaScript desde el servidor

La interacción entre el código del lado cliente y el código del lado servidor en una página de ASP.NET es algo complicada. Debemos comprender bien la diferencia entre ambos ambientes para saber cómo utilizarlos y qué limintaciones tenemos.

A diferencia de la programación normal en HTML, donde el usuario introduce datos y presiona un botón submit para enviar la información al servidor, las aplicaciones en .NET utilizan JavaScript para la comunicación con el servidor. Cuando presionamos un botón de .NET, cuando seleccionamos un elemento de una lista que tiene propiedad AutoPostBack, cuando presionamos un LinkButton, todos estos elementos ejecutan la función __doPostBack, la cual guarda en el elemento ViewState toda la información del estado actual de la página (valores introducidos por el usuario) y entonces ejecuta el método submit de la forma.

Una vez hecho el submit, la página se recarga, iniciando de nuevo todo el ciclo de vida de una página web, más la etapa de PostBack, en la que recarga los valores introducidos por el usuario.

Como podemos ver, la comunicación con el servidor no requiere participación del usuario, pues toda la realiza el mismo servidor de forma automática. Por el otro lado, la tarea del servidor (después de ejecutar todas las instrucciones indicadas por el programador), es generar el código HTML correspondiente al resultado de lo que el usuario realiza en la aplicación. Visto de un modo sencillo, el servidor "escribe" la página web con los cambios que se le deban mostrar al usuario.

Ambas cosas suceden en etapas distintas del ciclo de vida de la página. Mientras el cliente no haga el submit de una forma, puede estar trabajando con la página, interactuando con el código del lado cliente (JavaScript), y hasta que haga ese submit, el servidor no tendrá participación. Al hacer el submit, la página como la ve el cliente, se pierde, y una nueva se cargará desde el servidor.

Ya vimos que podemos invocar al código del servidor desde el cliente, en cierto modo. Pero, ¿se puede invocar al código de cliente desde el servidor?

La respuesta correcta es "algo así". Realmente no vamos a ejecutar código JavaScript desde el servidor. Lo que vamos a hacer es enviar la instrucción al servidor de que "escriba" junto con la página, instrucciones de JavaScript que nosotros generaremos.

Para esto, usamos el objeto Page.ClientScript, instancia de la clase ClientScriptManager que se crea automáticamente con la página ASPX

protected void button1_Click(object sender, EventArgs e){
    if (TextBox1.Text == String.Empty){
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
            "mensaje",
            "<script type=\"text/javascript\">" +
                "alert(\"Debe introducir texto en el campo\");" +
            "</script>", false)
    }
}

El método RegisterClientScriptBlock debe llevar como parámetros un tipo de secuencia de comandos (para lo que usamos el mismo tipo de la página actual), un identificador del script que estamos insertando (el cual será reemplazado en caso de registrar otros script con el mismo identificador), el script, que puede o no llevar las etiquetas <script>, y un boolean, que indica si se deben insertar automáticamente las etiquetas <script>

En lo personal, siempre escribo las etiquetas <script>, porque cuando el servidor las crea automáticamente agrega algo como <![CDATA….>, que la verdad no sé para qué lo hace, pero nunca me ha hecho falta.

Con éste código, le estamos indicando al servidor que al cargar la página de nuevo, agregue un script con una función alert. Al crearse la página de nuevo, el script se comportará como normalmente lo haría en cualquier página web.

También existe un método RegisterClientScriptInclude, que agrega la referencia a un archivo .js.

Cuando creamos bibliotecas de clases en .NET, y éstas incluyen scripts propios, los insertamos en la página usando estos mismos métodos.

Tecnologías como AJAX van más allá de esto, aunque la tecnología AJAX.NET, nativa en el framework, es muy parecida a lo que hacemos en este ejemplo. AJAX.NET hace la llamada al servidor, como lo haría normalmente, pero devuelve al cliente únicamente una parte de la página, sin reflejar el PostBack de la página entera (aunque sí lo hace).

Una implementación de AJAX bien hecha, en la que tanto código del servidor como código del cliente interactuen de forma casi "paralela", implicaría programación más compleja.

Anuncio publicitario

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s