Contrôles de formulaires et de champs

Dernière modification : vendredi 9 avril 2010

S’applique à : SharePoint Foundation 2010

Un formulaire Microsoft SharePoint Foundation se compose de contrôles ASP.NET qui définissent le formulaire ainsi que les champs et d’autres éléments dans le formulaire. Les contrôles SharePoint sont organisés selon une hiérarchie de contrôles, où se trouve un contrôle de base dont dérivent tous les contrôles.

Les contrôles qui sont utilisés dans les formulaires SharePoint sont définis dans l’espace de noms Microsoft.SharePoint.WebControls, et ils prennent en charge toutes les fonctionnalités de formulaire de SharePoint Foundation. Par exemple, cet espace de noms fournit un contrôle qui génère le rendu des champs sur la base du schéma de la liste, des contrôles pour tous les types de champs SharePoint par défaut, des contrôles pour la barre d’outils, l’en-tête et le pied de page, et un contrôle pour la liste. Vous pouvez réutiliser des contrôles existants, ou étendre des contrôles pour une fonctionnalité spécifique.

La figure 1 montre la hiérarchie des contrôles courants qui sont utilisés dans les formulaires et dans leurs champs.

Figure 1. Contrôles de champ de formulaire courants

Hiérarchie des contrôles de formulaire

Extension des contrôles

Vous pouvez créer les contrôles de champs personnalisés qui héritent des fonctionnalités de champ de base des contrôles SharePoint Foundation, mais qui modifient la façon dont les champs sont rendus. Un contrôle de champ personnalisé hérite de Microsoft.SharePoint.WebControls.BaseFieldControl : il n'est donc pas nécessaire d'implémenter à nouveau les principales fonctionnalités de champ pour personnaliser le rendu des champs. Vous pouvez simplement insérer un contrôle de champ existant sur la page de formulaire et définir les propriétés sur le contrôle, ou bien vous pouvez créer une classe code-behind qui ajoute le contrôle.

Initialisation de la page

Lorsque vous créez par programme un contrôle de champ par le biais de code-behind, vous devez créer le contrôle lors de la phase d'initialisation du cycle de vie de la page (Page_Init). Dans le cas contraire, ASP.NET chargeant l'état d'affichage avant l'étape de chargement, le contrôle de champ ne reçoit pas à sa création une entrée de l'utilisateur mise à jour.

L'exemple suivant montre comment appeler Page_Init.

Public Sub New()
    AddHandler Me.Init, AddressOf Page_Init
End Sub
Private Sub Page_Init(sender As Object, e As System.EventArgs)
    ... 'Add field control to the page control tree.
End Sub
public EditMetadata(): base()
{
    this.Init += new EventHandler(Page_Init);
}
private void Page_Init(object sender, System.EventArgs e)
{
    ... //Add field control to the page control tree.
}

Rendu conditionnel

SharePoint Foundation prend en charge trois façons différentes de déterminer le modèle de contrôle à utiliser dans le rendu d’un formulaire :

  • Définition par programme du modèle pour le contrôle

  • Définition du modèle dans l'instance du contrôle en définissant un attribut de modèle

  • Définition du modèle dans le balisage du contrôle

Le rendu conditionnel des formulaires et des champs via des modèles de contrôle ou du code-behind implique par exemple l'utilisation des propriétés Template et AlternateTemplate ainsi que celle d'autres membres hérités de Microsoft.SharePoint.WebControls.TemplateBasedControl. Vous pouvez créer des formulaires qui sélectionnent les modèles utilisés pour rendre les contrôles et qui affichent les champs différemment en fonction du niveau d'autorisation des utilisateurs.

Validation

SharePoint Foundation n’utilise pas les contrôles de validation .NET. Les champs par défaut fournis dans l’espace de noms Microsoft.SharePoint.WebControls héritent de BaseFieldControl, qui implémente l’interface System.Web.UI.IValidator et remplace sa méthode Validate. La validation côté serveur dans les formulaires SharePoint n’est pas limitée au niveau des contrôles de champs mais elle peut également être effectuée par programme dans le code qui utilise le modèle objet.

Ordre des champs

Le schéma de la liste ou le type de contenu détermine l'ordre d'affichage des champs dans un formulaire de liste. Le contrôle Repeater Microsoft.SharePoint.WebControls.ListFieldIterator dans un formulaire suit l'ordre des champs défini dans le fichier de schéma de liste (schema.xml). L'ordre des champs défini dans le schéma détermine l'ordre pour les trois modes de contrôle de formulaire (nouveau, modifier et afficher).

Contrôle FormField

Vous pouvez utiliser des contrôles FormField pour produire une mise en page fixe de champs spécifiques, et utiliser le contrôle ListFieldIterator pour le rendu des champs restants. Le contrôle FormField instancie un contrôle de champ spécifique au type basé sur le schéma de champ. Par conséquent, pour ajouter un contrôle de champ dans un formulaire, utilisez FormField au lieu d'un contrôle de champ spécifique au type. Par exemple, si vous utilisez un contrôle de champ spécifique au type, tel que TextField sur un champ Text spécifique, mais que le type de champ est changé ultérieurement en un autre type de données, tel que Number, le rendu du champ échoue car le contrôle de champ (TextField) ne correspond pas au type de champ. Toutefois, l'utilisation d'un contrôle FormField

instancie le contrôle approprié et le rendu du champ n'échoue pas.

Contrôle CompositeField

Le contrôle CompositeField est utile car son modèle de contrôle par défaut inclut plusieurs contrôles de champs. Le contrôle CompositeField utilise FieldLabel pour rendre le nom de fichier, FormField pour afficher des données et FieldDescription pour afficher une description du champ. En outre, le contrôle CompositeField inclut le contrôle AppendOnlyHistory pour afficher un champ multiligne AppendOnlyText, qui reste masqué dans d'autres scénarios.

L'exemple suivant montre le modèle de contrôle défini dans DefaultTemplates.ascx pour le contrôle CompositeField.

<SharePoint:RenderingTemplate ID="CompositeField" runat="server">
  <Template>
    <TD nowrap="true" valign="top" width="190px" class="ms-formlabel"><H3 class="ms-standardheader">
      <SharePoint:FieldLabel runat="server"/>
    </H3></TD>
    <TD valign="top" class="ms-formbody" width="400px">
      <SharePoint:FormField runat="server"/>
      <SharePoint:FieldDescription runat="server"/>
      <SharePoint:AppendOnlyHistory runat="server"/>
    </TD>
  </Template>
</SharePoint:RenderingTemplate>

Vous pouvez créer un modèle d'itérateur de champ de liste personnalisé qui inclut un contrôle de champ composite personnalisé, comme dans l'exemple suivant :

<SharePoint:RenderingTemplate ID="CustomListFieldIterator" runat="server">
  <Template>
    <TR>
      <SharePoint:CompositeField Template="CustomCompositeField" runat="server"/>
    </TR>
  </Template>
</SharePoint:RenderingTemplate>