Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

OutputCache et ScriptManager – Attention, seul le rendu est caché

Lorsque j’utilise un UserControl et que j’ai besoin d’inclure des scripts JavaScript, j’utilise un ScriptManagerProxy. L’avantage du ScriptManagerProxy est qu’il n’inclut le script qu’une seule fois, qu’importe si le UserControl se répète ou si l’on inclut le même script via un autre ScriptManagerProxy.

Récemment j’ai eu besoin d’activer du cache ASP.net sur un tel UserControl. J’ai donc utilisé la directive @OutputCache afin de mettre en place ce cache. Mon UserControl ressemblait alors à ceci :

<%@ Control Language="C#" %> <%@ OutputCache Duration="60" VaryByParam="none" %> <asp:ScriptManagerProxy runat="server"> <Scripts> <asp:ScriptReference Path="~/js/pouet.js" /> </Scripts> </asp:ScriptManagerProxy> <%= DateTime.Now.ToLongTimeString() %>

Lors du premier affichage d’une page contenant cet UserControl, tout se passe bien, le script est correctement chargé. Par contre si j’actualise cette page, alors mon UserControl provient du cache mais le script JavaScript, lui, n’est pas chargé.

Pourquoi ?

Afin de comprendre d’où vient le problème, il faut comprendre ce que fait la directive OutputCache. Lorsque ASP.net rencontre une telle directive, il va alors créer un contrôle héritant de PartialCachingControl. Ce contrôle va alors se charger de gérer le cache : si le rendu du contrôle est présent dans le cache ASP.net va utiliser le rendu HTML du UserControl présent en cache, sinon il va utiliser le UserControl.

C’est ici qu’est le problème : lorsqu’ASP.net utilise le cache, il n’exécute pas les différents événements du UserControl (Init, Load, …). Dans notre cas, le ScriptManagerProxy ajoute les scripts dans le ScriptManager de la page lors de son événement Load.

Ce problème est présent avec le ScriptManagerProxy, mais il se retrouve dès que vous modifier le HTML à l’extérieur du UserControl à partir de celui-ci. Si vous utilisez par exemple les fonctions du ScriptManager ou du ClientScript comme le RegisterClientScript, vous serez alors aussi confrontés à ce souci.

Comment faire ?

Il n’y a pas de solution à ce problème, il s’agit d’un “bug” by design. Si l’on souhaite rajouter du cache sur un UserControl utilisant un ScriptManagerProxy, il faut déplacer le ScriptManagerProxy au niveau de la page.

L’ajout de cache sur un UserControl n’est donc pas une chose bénigne, il faut bien s’assurer que les événements du UserControl ne modifie pas le HTML de la page.

Et vous, avez vous déjà rencontré de tel soucis ?

Posted: jeudi 17 décembre 2009 00:13 par cyril
Classé sous : , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01