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

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le il y a 18 heures et 40 minutes

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10

- [Event] Windows Azure dev Camp le 20 juin! par Fathi Bellahcene le 05-13-2012, 09:29

- Comment redimensionner une image avec WinRT : plusieurs solutions par Richard Clark le 05-11-2012, 15:43

- Event : Swiss SharePoint Club Meeting #20 à Yverdon par Blog Technique de Romelard Fabrice le 05-11-2012, 15:24

- Réflechissons un peu ce matin à propos des ORM par Richard Clark le 05-11-2012, 08:48

- #SharePoint Solutions Roadshow le 5 juin à Issy ! par Le blog de Patrick [MVP SharePoint] le 05-09-2012, 15:10

- SharePoint : Mes alertes ne marchent pas … Que faire ? Comment réparer ou agir ? par The Mit's Blog le 05-08-2012, 14:59