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

TemplateInstanceAttribute dans les custom WebControl sur un ITemplate

Lorsque l'on créé des Custom Control avec un système de Template, il se peut que parfois on ne répète pas notre template. Par défaut un template étant répétable, ASP.net ne déclare pas de variable au niveau de la page, il n'est donc pas accessible dans le code behind.

Par exemple :

<test:testtemplate runat="server" id="tt"> <MyTemplate> <asp:label id="lblTest" runat="server" Text="Coucou du template" /> </MyTemplate> </test:testtemplate>

Dans le code behind, lblTest n'est pas directement accessible puisqu'il peut être répèté. Mais dans certains cas, on sait que le Template ne sera pas repeté, il est donc intéressant que les contrôles du template soit accessible dans le code behind. C'est l'attribut TemplateInstanceAttribute qui permet ça :

<TemplateInstance(TemplateInstance.Single)> _ <PersistenceMode(PersistenceMode.InnerProperty)> _ Public Property MyTemplate() As ITemplate

A quoi est-ce utile ? On pourrait penser qu'un Template qui ne se répète pas est inutile, qu'il est plus simple d'utiliser l'attribut PersistChildren qui indique au parseur ASP.net de parser le contenu du contrôle comme étant ses enfants. cet attribut est utile si vous avez des propriétés complexes que vous avez décoré avec l'attribut PersistenceMode, les propriétés portant cet attribut peuvent être définit dans le contenu du contrôle.

Le contrôle UpdatePanel est un exemple typique de ce scénario, sa propriété ContentTemplate est décorée de l'attribut TemplateInstance, les propriétés ContentTemplate et Triggers possèdent l'attribut PersistenceMode :

[ParseChildren(true)] [PersistChildren(false)] public class UpdatePanel : Control { [PersistenceMode(PersistenceMode.InnerProperty)] public UpdatePanelTriggerCollection Triggers { get; } [TemplateInstance(TemplateInstance.Single)] [PersistenceMode(PersistenceMode.InnerProperty)] public ITemplate ContentTemplate { get; set; } }

C'est pour ça que lorsque nous utilisons le code ci-dessous, lblTest est accessible au niveau du code behind

<asp:UpdatePanel runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Label ID="lblTest" runat="server" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnTest" /> </Triggers> </asp:UpdatePanel>

Si vous utilisez cet attribut, attention à bien faire le InstantiateIn relativement tôt pour qu'il soit accessible dans les événements load, init & co de la page. Je vous conseille de faire le InstantiateIn dans le CreateChildControls et d'appeler la méthode EnsureChildControls() au niveau de l'événement init du contrôle.

Pour en savoir plus sur les ITemplate et comment cela fonctionne au niveau de la compilation : Explication de l'interface ITemplate pendant la compilation ASP.net

Posted: lundi 15 octobre 2007 18:50 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

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