Partager via


Procédure : créer des modèles de rendu de champ

Dernière modification : dimanche 4 avril 2010

S’applique à : SharePoint Foundation 2010

Dans cet article
Rapport entre les modèles de rendu et les contrôles de rendu
Système du modèle de rendu
Configuration du rendu des champs
Scénarios nécessitant plusieurs modèles de rendu
Ajout d’associations de modèles
Utilisation de contrôles personnalisés Web comme modèles

Un modèle de rendu de champ est un objet RenderingTemplate défini en tant qu’élément RenderingTemplate dans un fichier .ascx du dossier %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\controltemplates. Conjointement avec la méthode CreateChildControls d’une classe de contrôle de rendu, il permet d’afficher un champ dans les modes Nouveau, Modifier ou Affichage.

Rapport entre les modèles de rendu et les contrôles de rendu

Un objet RenderingTemplate est un type d’objet Control-ITemplate hybride. Il dérive de Control et ajoute un seul nouveau membre : une propriété Template qui contient un objet ITemplate. Cela permet à un contrôle de rendu (dérivé de TemplateBasedControl) de référencer des objets ITemplate indirectement en référençant un objet RenderingTemplate d’après l’ID de propriété du modèle de rendu (ID). Le contrôle de rendu peut effectuer cette opération à l’aide d’une ou de plusieurs des propriétés String dont il dispose, telles que TemplateName, qui peut contenir l’ID d’un modèle de rendu.

Système du modèle de rendu

À chaque contrôle de rendu de champ est associé au moins un modèle de rendu de champ. Au moment du rendu, SharePoint Foundation recherche le modèle nécessaire d’après les ID de tous les contrôles déclarés dans les fichiers .ascx du dossier %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES (tous chargés au démarrage de l’application Web).

Configuration du rendu des champs

Le schéma de la configuration du rendu des champs que vous serez amené à utiliser le plus souvent lors du développement de types de champs personnalisés présente les caractéristiques suivantes :

  • Le contrôle de rendu est associé à deux modèles de rendu et utilise ses propriétés TemplateName et DisplayTemplateName pour spécifier leurs ID.

  • Un seul modèle assure la majeure partie du rendu des champs en modes Nouveau et Modifier. L’autre assure la majeure partie du rendu des champs en mode Affichage.

  • La méthode CreateChildControls du contrôle de rendu affecte des valeurs par défaut aux contrôles enfants du contrôle de rendu en mode Nouveau. Elle affecte les valeurs actuelles du champ aux contrôles enfants en mode Modifier et Affichage. En outre, elle peut réaliser des tâches de rendu finales telles que l’affectation d’une classe CSS à un contrôle Label enfant.

  • La logique de validation est implémentée par les membres Validate, IsValid et ErrorMessage du contrôle de rendu de champ et par la méthode GetValidatedString du type de champ sous-jacent. (Validate peut être appelé par CreateChildControls.)

BaseFieldControl hérite, de TemplateBasedControl et FieldMetadata, des membres qui lui permettent d’être lié à plusieurs modèles de rendu et de basculer de l’un à l’autre en fonction du contexte de rendu.

Scénarios nécessitant plusieurs modèles de rendu

Outre Template, TemplateName, DisplayTemplate et DisplayTemplateName, vous pouvez utiliser AlternateTemplate et AlternateTemplateName.

Utilisez un modèle de remplacement pour restituer votre champ personnalisé dans un contexte de page dans lequel le modèle principal ne répond pas à vos besoins. Voici certains exemples :

  • Si le champ est requis dans certaines listes, mais pas dans d’autres, vous pouvez utiliser un modèle de remplacement identique au modèle principal, à la seule exception qu’il ajoute un indicateur, par exemple, un astérisque rouge, signalant que le champ est requis dans des listes spécifiques. Ensuite, vous pouvez utiliser l’accesseur get de ControlTemplate afin qu’il vérifie la propriété Required du champ sous-jacent et retourne Template ou AlternateTemplate selon le cas.

  • Si vous envisagez d’utiliser de nombreux types de champs personnalisés dont le rendu sera pratiquement identique, vous pouvez obtenir une meilleure réutilisation du code en créant un modèle à utiliser en mode Nouveau et un autre à utiliser en mode Modifier. Le premier attribuerait des valeurs par défaut aux objets enfants, tandis que le second affecterait des valeurs actuelles. Ainsi, vous n’auriez pas besoin de répéter la logique d’affectation dans la méthode CreateChildControls de chacune des classes de type de champ personnalisé. Dans ce cas également, l’accesseur get de ControlTemplate déterminerait le modèle utilisé en fonction du mode de contrôle.

  • L’utilisation d’un modèle de remplacement peut également être utile lorsque votre champ doit s’afficher d’une manière particulière sur certains sites Web, certaines collections de sites ou certaines applications Web. Par exemple, prenons le cas d’un site Web conçu pour des personnes souffrant d’une déficience visuelle, telle que le daltonisme. L’accesseur get de ControlTemplate peut examiner la valeur de RenderContext pour déterminer si le modèle spécial est requis et retourner le modèle approprié.

  • Pour les types de champs personnalisés qui héritent de SPFieldNumber et qui, parfois, mais pas systématiquement, doivent être restitués sous la forme de pourcentages, le fait d’avoir deux modèles de rendu différents peut faire gagner beaucoup de temps pendant la phase de développement. Substituez l’accesseur get de ControlTemplate pour répondre à la valeur de la propriété SPFieldNumber.ShowAsPercentage.

Ajout d’associations de modèles

Vous pouvez, bien sûr, ajouter des associations de modèles de rendu au contrôle de rendu de champ que vous dérivez de BaseFieldControl. Il est recommandé de suivre la procédure ci-dessous :

  • Créez un champ privé de type ITemplate.

  • Créez une propriété publique destinée à encapsuler le champ privé et attribuez-lui un nom tel que circonstancesTemplate, où circonstances identifie les circonstances dans lesquelles vous anticipez l’utilisation du modèle.

  • Créez une seconde propriété publique qui retourne une constante String et nommez-la circonstancesTemplateName.

  • L’accesseur get de circonstancesTemplate ne doit retourner le champ privé que si celui-ci n’a pas pour valeur null. Sinon, il doit retourner la constante ITemplate nommé par circonstancesTemplateName. Utilisez la méthode GetTemplateByName() pour effectuer cette opération.

  • Substituez l’accesseur get de ControlTemplate pour retourner circonstancesTemplate où circonstances a pour valeur true.

Utilisation de contrôles personnalisés Web comme modèles

Votre contrôle de rendu de champ personnalisé hérite également deux propriétés ITemplate spéciales : CustomTemplate et CustomAlternateTemplate. Ces deux propriétés sont marquées avec l’attribut [PersistenceMode(PersistenceMode.InnerProperty)]. Cela signifie que les objets ITemplate qu’elles retournent sont compilés et qu’ils demeurent dans le contrôle de rendu de champ sous la forme de balises imbriquées. L’utilisation de modèles précompilés présente plusieurs avantages ; par exemple, vous pouvez les ajouter à une page dans un concepteur visuel tel que SharePoint Designer ou Visual Studio en les faisant glisser-déplacer depuis la boîte à outils du concepteur. Toutefois, cette utilisation présente aussi des inconvénients. Pour plus d’informations sur les contrôles utilisateur Web et les contrôles Web personnalisés, voir Web User Controls and Web Custom Controls et PersistenceModeAttribute.

Voir aussi

Tâches

Procédure pas à pas : création d'un type de champ personnalisé

Concepts

Types de champ personnalisés

Procédure : créer une classe de champ personnalisé

Validation des données du champ personnalisé

Procédure : créer une classe de valeurs de champs personnalisée

Procédure : créer une définition de type de champ personnalisé

Rendu des propriétés de type de champ personnalisés

Contrôles d'éditeur pour les propriétés de type de champ

Procédure : créer un contrôle de rendu de champ

Procédure : créer un type de champ personnalisé