Solucionar esto en una página con AJAX es muy sencillo mediante javascript usando este código:
//Guardo el último elemento que ha causado un postback
var postBackElementID;
//Guardar estado del "PostbackElement"
var peCursorStyle;
var peDisabled;
var peLinkTarget;
var peLinkClick;
//Obtener referencia a PageRequestManager
var prm = Sys.WebForms.PageRequestManager.getInstance();
//Añadir eventos de PageRequestManager
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function InitializeRequest(sender, args){
//Obtengo el elemento que ha causado el postback
postBackElementID = sender._postBackSettings.sourceElement != undefined ? sender._postBackSettings.sourceElement.id : "";
//Deshabilito el botón que ha causado el postback
if(postBackElementID != "" && $(postBackElementID)){
var postBackElement = $(postBackElementID);
peCursorStyle = postBackElement.style.cursor;
peDisabled = postBackElement.disabled;
postBackElement.style.cursor = 'wait';
postBackElement.disabled = true;
if(postBackElement.tagName == 'A'){
peLinkTarget = postBackElement.href;
peLinkClick = postBackElement.onclick;
postBackElement.href = 'javascript:void(0);';
postBackElement.onclick = new Function('return false;');
}
}
}
function EndRequest(sender, args){
//Habilito el botón que ha causado el postback (si estaba habilitado)
if(postBackElementID != "" && $(postBackElementID)){
var postBackElement = $(postBackElementID);
postBackElement.style.cursor = peCursorStyle;
postBackElement.disabled = peDisabled;
if(postBackElement.tagName == 'A'){
postBackElement.href = peLinkTarget;
postBackElement.onclick = peLinkClick ? peLinkClick : "javascript:void(0);";
}
}
}
InitializeRequest se ejecutará al inicio del postback, mientras que EndRequest lo hará al finalizar éste. En el primero deshabilitamos el control y guardamos su estado. En el segundo reestablecemos el estado de dicho control.
Nota: En este ejemplo se usa la librería prototype. Si no la estás usando, cambia $ por document.getElementById.
No hay comentarios:
Publicar un comentario