Formular- und Feldsteuerelemente
Letzte Änderung: Freitag, 9. April 2010
Gilt für: SharePoint Foundation 2010
Ein Microsoft SharePoint Foundation-Formular besteht aus ASP.NET-Steuerelementen, mit denen das Formular sowie die Felder und andere Elemente im Formular definiert werden. SharePoint-Steuerelemente folgen einer Steuerelementhierarchie, in der ein Basissteuerelement vorhanden ist, von dem alle Steuerelemente abgeleitet werden.
Die in SharePoint-Formularen verwendeten Steuerelemente werden im Microsoft.SharePoint.WebControls-Namespace definiert und unterstützen die gesamte Formularfunktionalität von SharePoint Foundation. In diesem Namespace wird beispielsweise ein Steuerelement bereitgestellt, mit dem Felder basierend auf dem Listenschema gerendert werden, Steuerelemente für alle SharePoint-Standardfeldtypen, Steuerelemente für die Symbolleiste, Kopfzeile und Fußzeile sowie ein Steuerelement für die Liste. Sie können vorhandene Steuerelemente wiederverwenden oder Steuerelemente für eine bestimmte Funktionalität erweitern.
In Abbildung 1 wird die Hierarchie der allgemeinen Steuerelemente gezeigt, die in Formularen und deren Feldern verwendet werden.
Abbildung 1. Allgemeine Formular- und Feldsteuerelemente
Erweitern von Steuerelementen
Sie können benutzerdefinierte Feldsteuerelemente erstellen, die die grundlegende Feldfunktionalität von SharePoint Foundation-Steuerelementen erben, mit denen jedoch Felder auf andere Weise gerendert werden. Ein benutzerdefiniertes Feldsteuerelement erbt von Microsoft.SharePoint.WebControls.BaseFieldControl, sodass für die Anpassung des Feldrenderings die Kernfeldfunktionalität nicht erneut implementiert werden muss. Sie können einfach ein vorhandenes Feldsteuerelement auf der Formularseite einfügen und Eigenschaften für das Steuerelement festlegen, oder Sie können eine CodeBehind-Klasse erstellen, von der das Steuerelement hinzugefügt wird.
Seiteninitialisierung
Wenn Sie über CodeBehind programmgesteuert ein Feldsteuerelement erstellen, müssen Sie das Steuerelement während der Initialisierungsphase des Seitenlebenszyklus (Page_Init) erstellen. Anderenfalls erhält das Steuerelement bei der Erstellung keine aktualisierten Benutzereingaben, da der Ansichtsstatus von ASP.NET vor der Ladephase geladen wird.
Im folgenden Beispiel wird das Aufrufen von Page_Init veranschaulicht.
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.
}
Bedingtes Rendering
In SharePoint Foundation werden drei verschiedene Methoden unterstützt, mit denen Sie ermitteln können, welche Steuerelementvorlage beim Rendern eines Formulars verwendet werden soll:
Programmgesteuertes Festlegen der Steuerelementvorlage für das Steuerelement
Festlegen der Steuerelementvorlage in der Instanz des Steuerelements durch Festlegen eines Vorlagenattributs
Definieren der Vorlage im Markup des Steuerelements
Bedingtes Rendering von Formularen und Feldern über Steuerelementvorlagen oder CodeBehind beinhaltet beispielsweise die Verwendung der Eigenschaften Template und AlternateTemplate sowie anderer von Microsoft.SharePoint.WebControls.TemplateBasedControl geerbter Mitglieder. Sie können Formulare erstellen, mit denen die zum Rendern von Steuerelementen verwendeten Vorlagen ausgewählt werden und Felder abhängig von der Berechtigungsstufe des Benutzers unterschiedlich angezeigt werden.
Validierung
In SharePoint Foundation werden nicht die .NET-Validierungssteuerelemente verwendet. Im Microsoft.SharePoint.WebControls-Namespace bereitgestellte Standardfelder erben von BaseFieldControl, von dem die System.Web.UI.IValidator-Schnittstelle bereitgestellt und die zugehörige Validate-Methode außer Kraft gesetzt wird. Die serverseitige Validierung in SharePoint-Formularen ist nicht auf die Ebene der Feldsteuerelemente begrenzt, sondern kann auch programmgesteuert in Code ausgeführt werden, in dem das Objektmodell verwendet wird.
Feldreihenfolge
Die Reihenfolge der in einem Listenformular angezeigten Felder wird durch das Listenschema oder den Inhaltstyp bestimmt. Die Feldreihenfolge des Microsoft.SharePoint.WebControls.ListFieldIterator-Wiederholungssteuerelements in einem Formular entspricht der in der Listenschemadatei (Schema.xml) definierten Feldreihenfolge. Die im Schema definierte Feldreihenfolge bestimmt die Reihenfolge für alle drei Modi von Formularsteuerelementen (neu, bearbeiten und anzeigen).
FormField-Steuerelement
Sie können FormField-Steuerelemente verwenden, um ein festes Layout bestimmter Felder zu erzeugen, und das ListFieldIterator-Steuerelement, um die verbleibenden Felder zu rendern. Durch das FormField-Steuerelement wird ein typenspezifisches Feldsteuerelement instanziiert, das auf dem Feldschema basiert. Verwenden Sie daher zum Hinzufügen eines Feldsteuerelements in einem Formular FormField anstelle eines typenspezifischen Feldsteuerelements. Wenn Sie beispielsweise ein typenspezifisches Feldsteuerelement wie TextField in einem bestimmten Text-Feld verwenden und der Feldtyp später in einen anderen Datentyp geändert wird (beispielsweise Number), tritt beim Feldrendering ein Fehler auf, da das Feldsteuerelement (TextField) nicht dem Feldtyp entspricht. Wenn Sie jedoch ein FormField
-Steuerelement verwenden, wird das richtige Steuerelement instanziiert, und beim Feldrendering tritt kein Fehler auf.
CompositeField-Steuerelement
Das CompositeField-Steuerelement ist hilfreich, da die zugehörige Standard-Steuerelementvorlage mehrere Feldsteuerelemente enthält. Vom CompositeField-Steuerelement wird FieldLabel zum Rendern des Dateinamens, FormField zum Anzeigen von Daten und FieldDescription zum Anzeigen einer Beschreibung des Felds verwendet. Außerdem enthält das CompositeField-Steuerelement das AppendOnlyHistory-Steuerelement zum Anzeigen eines mehrzeiligen AppendOnlyText-Felds, das in anderen Szenarien ausgeblendet bleibt.
Im folgenden Beispiel wird die in DefaultTemplates.ascx definierte Steuerelementvorlage für das CompositeField-Steuerelement gezeigt.
<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>
Sie können eine benutzerdefinierte Vorlage für einen Listenfelditerator erstellen, die wie im folgenden Beispiel ein benutzerdefiniertes zusammengesetztes Feldsteuerelement enthält:
<SharePoint:RenderingTemplate ID="CustomListFieldIterator" runat="server">
<Template>
<TR>
<SharePoint:CompositeField Template="CustomCompositeField" runat="server"/>
</TR>
</Template>
</SharePoint:RenderingTemplate>