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

Le tagMapping : comment changer les comportements des controles web en quelques lignes

              I.      Introduction

Pour ceux qui ont eu la chance d’aller aux devdays, vous avez peut être entendu Pierre Lagarde parler de tagmapping lors de la session sur Atlas.

 

Pour les autres voici un bref rappel, le tagmapping permet de remplacer une balise par une autre. Par exemple, vous avez un site qui utilise les contrôles WebPart de ASP.net 2, une fois que le site est fini, vous testez avec Firefox, et avec horreur vous constatez que certaines fonctionnalités des WebPart ne sont pas compatibles avec Firefox ! 2 solutions s’offrent à vous :

- Vous êtes courageux, vous décider de créer votre propre WebPart en dérivant des WebPart qui existent déjà, puis vous remplacez toutes les occurrences de <asp:webpart par votre propre contrôle

- vous fermez les yeux J

 

La deuxième solution a l’air sympa, mais ca risque de pas plaire à certains. On va donc choisir la première, mais on peut faire mieux et éviter de passer dans toutes les pages pour changer les balises. Comme son nom l’indique le TagMapping va le faire pour vous.

 

Il vous suffit de spécifier dans web.config qui (mappedTagType) remplace qui (tagType) et le tour est joué :

 

    <pages>

      <tagMapping>

        <add tagType="System.Web.UI.WebControls.WebParts.WebPartManager" mappedTagType="Microsoft.Web.UI.Controls.WebParts.WebPartManager"/>

        <add tagType="System.Web.UI.WebControls.WebParts.WebPartZone" mappedTagType="Microsoft.Web.UI.Controls.WebParts.WebPartZone"/>

      </tagMapping>

    </pages>

 

En plus Atlas possede des contrôles WebParts qui justement sont compatibles pour Firefox : donc vous avez même plus besoin de coder : http://blogs.neudesic.com/blogs/david_barkol/archive/2006/03/22/82.aspx

 

La première fois que j’ai vu le TagMapping, j’ai été agréablement surpris, j'ai de suite rajouté une tache dans outlook qui depuis me répète que je dois approfondir le sujet : c’est chose faites !

            II.      Comment cela fonctionne ?

Pour tester le tagmapping, je vais remplacer un classique label par un contrôle monLabel. Tout d’abord je créer une page de test contenant un label ! Puis je créer un nouveau contrôle héritant de label :

 

public class MonLabel : System.Web.UI.WebControls.Label

{

    protected override void Render(HtmlTextWriter writer)

    {

        writer.Write("coucou du tagmapping ");

        base.Render(writer);

    }

}

 

Je spécifie qui remplace quqi dans le web.config

 

    <pages>

      <tagMapping>

        <add mappedTagType="MonLabel" tagType="System.Web.UI.WebControls.Label"/>

      </tagMapping>

    </pages>

 

Je test, OK. C’est simple à mettre en place. Sympa comme truc, je peux faire de l’héritage de contrôle encore plus facilement qu’avant.

 

Mais une idée m’est venue en tête : TagMapping, le nom suppose qu’on fait de la « redirection » de contrôles seulement sur les contrôles déclaré avec un tag dans le .aspx . Et si je rajoute un label dynamiquement que se passe-t’il ?

 

Ni une, ni deux, je test :  

 

    protected void Page_Load(object sender, EventArgs e)

    {

        Label lbl1 = new Label();

        lbl1.Text = "label dynamic";

 

        Page.Controls.Add(lbl1);

    }

 

Et mon idée était bien vu :

 

Le TagMapping ne fonctionne pas sur les contrôles rajoutés dynamiquement !!!

 

Je commence alors à avoir ma petite idée de comment fonctionne le truc, me vient alors en tête un 2eme test, que se passe t’il si on déploie le site ? Une fois compilé, les pages aspx ne servent plus à rien puisque compilé. Si je change le tagmapping dans le web.config, il va faire quoi ? recompiler ?

 

Je déploie mon site : pour rappel menu  Build > Publish Web Site, je décoche la case « Allow this precompiled site to be updatable », je configure IIS, je teste ma page, le tagMapping est pris en compte, je modifie le web.config pour supprimer le TagMapping, et ... cela ne fait rien ! aucune modification (l’application est bien relancé et aucun problème de cache).

 

Pire encore, si vous cocher la case « Allow this precompiled site to be updatable » et que vous modifiez le le web.config cela va faire une erreur, comme quoi <asp :label ne peut pas etre casté en monlabel !

 

Je lance (enfin) Reflector, et regarde, les dll de ma page.

 

      accessor1.AddParsedSubObject(new LiteralControl("\r\n        <div>\r\n            "));

      MonLabel label1 = this.__BuildControlLabel1();

      accessor1.AddParsedSubObject(label1);

      accessor1.AddParsedSubObject(new LiteralControl("\r\n        </div>\r\n    "));

 

Et oui ! Lors de la compilation de la page, le compilo a regardé le web.config et vu qu’il y avait du tagmapping, c’est lui qui remplace tout ca.

 

Le TagMapping ne peut pas être modifié sur un site en production sans recompilation !!!

 

Il est donc inutile de continuer sur Reflector pour voir exactement comment cela fonctionne (snif), c’est le compilo qui se charge de tout ca !  Attention, le tagMapping c’est bien, mais il faut faire attention aux petits pièges cachés.

 

Posted: mercredi 12 avril 2006 18:45 par cyril
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

Poppyto a dit :

Arf putain ça commençait trop bien, dommage pour la fin :(:(:(:(. En tout cas je mets bien ça précisuement de côté, je me disais bien que c'était possible :) (j'avais pas trop cherché :oP)
# avril 12, 2006 19:22
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- 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