Showing posts with label jquery. Show all posts
Showing posts with label jquery. Show all posts

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 :-)

Wednesday, November 10, 2010

Modal Popup de jQuery en MOSS 2007 con EventHandling de botones ASP.NET

Desde hace un par de semanas he dejado a un lado SharePoint 2010 y he estado retocando un viejo proyecto de SharePoint 2007. Entre otras muchas cosas, me ha tocado hacer frente a la configuración del AjaxControlToolkit en un portal de publicación, algo que ya había hecho hacía un año sin problemas. Con esto quería conseguir cosas como los ModalPopupExtender que tanto gustan a los UX designers.

Pues bien, será que me he vuelto más viejo, más tonto, o ambas, porque aún siguiendo el manual "straightforward" de MS, no logré hacer que funcionara (claro, que también puede ser la cantidad ingente de modificaciones que hay que hacer al web.config... grrr).

Hablando con Luru del problema, me acabó convenciendo de que jQuery es mucho mejor, y de que además "es el futuro, maaacho". Sinceramente mis recuerdos de hace un año sobre jQuery eran desastrosos, por eso elegí AJAX en su día. El caso es que la desesperación hizo que me bajara los .js de jQueryUI y una CSS que me gustó de su página, con la intención de conseguir algo parecido a esto.

Mmmhhh... no tenía mala pinta, pero ¿funcionaría? Meto los .js y los CSS en el LAYOUTS de la carpeta 14 12 y los añado en la master page, haciendo referencia directa a la ruta "_layouts/jquery-ui-1.8.6.custom.js" y a la de jquery. También incluyo el siguiente código en mi User Control con el panel que quiero mostrar en el popup.



$(document).ready(function () {
$("#panelAdjuntar").dialog(
{
autoOpen: false,
modal: true
});

$("#btAdjuntar").click(function (event) {
$("#panelAdjuntar").dialog('open');
});
});




En donde btAdjuntar es un botón en cliente normal, de los de toda la vida:






Y el panelAdjuntar es el div que quiero mostrar en el modal popup. Este div incluye varios controles ASP.NET como Label, Button, TextBox, FileUploads, y sus respectivos EventHandler.



...



Pruebo todo esto y voilá. Funciona! Juhuuu! Muestra el modal popup y además es bonito :-)

Le doy a uno de los botones ASP.NET de dentro de nuestro div panelAdjuntar y........... me c$#@-kW%a!!! No funciona nada. Depuro el código y tampoco. Vamos, que no hace nada, que no pilla el click del botón :-(

Un par de minutos más tarde encontré la solución aquí. Al parecer hay que modificar el código moviendo el div al form, y que así pille los eventos. El script me queda así entonces.





Y ahora sí que funciona el modal popup. Con sus botones ASP.NET y todo. Y además sigue siendo chulo :-)

Y yo... definitivamente me paso a jQuery. Gracias Luru!


PS: ¿Y vosotros? ¿jQuery o Ajax?.......