Tuesday, November 16, 2010

Modal popup de jQuery con EventHandling de Repeater en codebehind

Siguiendo con los posts acerca de jQuery, espero que este os solucione la papeleta más de una vez. Muchos leeréis el título y os preguntaréis para qué necesito manejar los eventos en el codebehind, si utilizo jQuery y ésta es una tecnología diseñada para correr en cliente. De hecho, muchos listillos expertos dan esa respuesta en muchos foros.

Mi situación es la siguiente: tengo un Repeater ASP.NET, y en cada uno de ellos un botón que abre un modal dialog de jQuery como el de mi anterior post. Dentro de ese popup existe un link que debe ser construido irremediablemente en código en servidor, y que evidentemente, será distinto para cada uno de mis popups (recordemos que vienen de botones distintos del Repeater).

La solución que aquí planteo seguramente no sea la mejor, pero era la que me permitía mantener la gestión de eventos que ya tenía en los botones del Repeater utilizando el atributo CommandName de asp:Button. Lo que haré será registrar la llamada a un nuevo método en el evento ItemCommand del Repeater, de la siguiente manera:


private void RptDocumentInstancesListItemCommand(object source, RepeaterCommandEventArgs e)
{
try
{
if (e.CommandName == "Ver")
{
...
Page.ClientScript.RegisterStartupScript(Page.GetType(), "openPopupDialogVer", string.Format("", idDocGuid)).Value));
...
}
}
}


Y modificar el script que abre el modal popup en jQuery, pasándole por parámetro el valor que he tenido que calcular en el codebehind (que en mi caso es un identificador de un documento) y asignándoselo, si quiero, a otro a otro input del formulario.


function openPopupDialogVer(docGuid) {
$(function () {
$('input[id^="idDoc"]').val(docGuid);
$("#panelVer").dialog('open');
return false;
});
}


Así conseguimos que al pasar por el evento ItemCommand, se llame a la función javascript que tiene que llamar jQuery (nuestro .dialog('open')).

Estoy listo para las críticas :-)

No comments:

Post a Comment