Exécuter un javascript à la fin de chaque requete AJAX.
Par fa7al le jeudi 10 décembre 2009, 09:57 - .NET - Lien permanent
Il est parfois pratique de pouvoir appeler un javascript à la fin d'un appel ajax (par exemple pour cacher un élément qui ne serait pas dans un update panel)
Exemple concret : des boutons d'export vers Excel ou Word comme dans ce billet ne peuvent pas être dans un UpdatePanel.
Si l'on souhaite les cacher lorsqu'aucun résultat à exporter n'existe, il faudra ajouter un HiddenField dans l'UpdatePanel qui prendra la valeur 1 ou 0 selon qu'il y a des résultats ou pas et un javascript qui lit sa valeur après chaque appel ajax pour cacher ou montrer le bouton d'export.
Un exemple parlant plus que des mots, prenons le code ci-dessous :
<table id="tableExport" style="display:none">
<tr>
<td align="center"><asp:ImageButton ID="ibt_excel" runat="server" onclick="ibt_excel_Click" ToolTip="Exporter vers Excel" ImageUrl="~/icones/page_excel.gif"/></td>
</tr>
</table>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:GridView ID="grdVue" runat="server">
</asp:GridView>
<asp:HiddenField ID="hdnHasResult" runat="server" Value="0" />
</ContentTemplate>
</asp:UpdatePanel>
Je fais volontairement abstraction du code de remplissage de la GridView qui n'a pas d'intérêt pour ce billet.
La seule chose à faire lors du remplissage de la GridView est de positionner la valeur de hdnHasResult à 0 ou à 1.
A la fin de la page ajouter le code suivant :
//Affiche ou cache les boutons à chaque fois qu'un appel ajax est effectué
function gridViewHasResult(){
var hdnHasResult = $get('<%=hdnHasResult.ClientID %>');
if (hdnHasResult.value!='0'){
document.getElementById('tableExport').style.display = '';
}
else{
document.getElementById('tableExport').style.display = 'none';
}
}
//Enregistre la méthode gridViewHasResult pour esxécution à la fin de chaque appel ajax.
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(gridViewHasResult);
</script>
A chaque fois que l'UpdatePanel sera raffraichit la fonction gridViewHasResult sera appelée.