Gewusst wie: Erstellen von Feldrenderingvorlagen

Letzte Änderung: Sonntag, 4. April 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Beziehung von Renderingvorlagen zu Renderingsteuerelementen
Das Renderingvorlagensystem
Feldrenderingkonfiguration
Szenarien, die mehrere Renderingvorlagen erfordern
Hinzufügen mehrerer Vorlagenzuordnungen
Verwenden von benutzerdefinierten Websteuerelementen als Vorlagen

Eine Feldrenderingvorlage ist ein RenderingTemplate-Objekt, das als RenderingTemplate-Element in einer ASCX-Datei im Ordner %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\controltemplates definiert ist. Sie wird in Verbindung mit der CreateChildControls-Methode einer Renderingsteuerelementklasse verwendet, um ein Feld im Modus Neu, Bearbeiten oder Anzeigen zu rendern.

Beziehung von Renderingvorlagen zu Renderingsteuerelementen

Ein RenderingTemplate-Objekt ist eine Art hybrides Control-ITemplate-Objekt. Es wird von Control abgeleitet und fügt lediglich einen neuen Member hinzu: eine Template-Eigenschaft, die ein ITemplate-Objekt enthält. Dies ermöglicht es einem Renderingsteuerelement (von TemplateBasedControl abgeleitet), indirekt auf ITemplate-Objekte zu verweisen, indem es mit der ID-Eigenschaft (ID) der Renderingvorlage auf ein RenderingTemplate-Objekt verweist. Das Renderingsteuerelement kann zu diesem Zweck eines oder mehrere seiner String-Eigenschaften, z. B. TemplateName, verwenden, die die ID einer Renderingvorlage enthalten kann.

Das Renderingvorlagensystem

Jedem Feldrenderingsteuerelement ist mindestens eine Feldrenderingvorlage zugeordnet. SharePoint Foundation sucht zur Renderingzeit die benötigte Vorlage, indem die IDs aller Steuerelemente durchsucht werden, die in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES in ASCX-Dateien (die alle beim Starten der Webanwendung geladen werden) deklariert sind.

Feldrenderingkonfiguration

Das Muster der Feldrenderingkonfiguration, die Sie beim Entwickeln benutzerdefinierter Feldtypen am häufigsten verwenden, weist die folgenden Merkmale auf:

  • Das Renderingsteuerelement ist zwei Renderingvorlagen zugeordnet, und deren IDs werden mit den Eigenschaften TemplateName und DisplayTemplateName des Steuerelements angegeben.

  • Mit der einen Vorlage erfolgt der Großteil des Feldrendering in den Modi Neu und Bearbeiten. Die andere Vorlage stellt den Großteil des Feldrendering im Modus Anzeigen bereit.

  • Die CreateChildControls-Methode des Renderingsteuerelements weist den untergeordneten Steuerelementen des Renderingsteuerelements Standardwerte im Modus Neu zu. Es weist den untergeordneten Steuerelementen die aktuellen Werte des Felds in den Modi Bearbeiten und Anzeigen zu. Es kann auch weitere abschließende Renderingaufgaben ausführen, z. B. einem untergeordneten Label-Steuerelement eine CSS-Klasse zuweisen.

  • Die Überprüfungslogik wird von den Membern Validate, IsValid und ErrorMessage des Feldrenderingsteuerelements sowie von der GetValidatedString-Methode des zugrunde liegenden Feldtyps implementiert. (Validate kann von CreateChildControls aufgerufen werden.)

BaseFieldControl erbt von Membern von TemplateBasedControl und FieldMetadata, die das Verknüpfen des Steuerelements mit mehreren Renderingvorlagen und das Wechseln zwischen diesen entsprechend dem Renderingkontext ermöglichen.

Szenarien, die mehrere Renderingvorlagen erfordern

Zusätzlich zu Template, TemplateName, DisplayTemplate und DisplayTemplateName können Sie auch AlternateTemplate und AlternateTemplateName verwenden.

Verwenden Sie eine alternative Vorlage zum Rendern des benutzerdefinierten Felds in einem beliebigen Seitenkontext, in dem die Hauptvorlage nicht Ihren Anforderungen entspricht. Hier sind einige Beispiele aufgeführt:

  • Falls das Feld nur in einigen Listen benötigt wird, können Sie eine alternative Vorlage verwenden, die mit der Hauptvorlage übereinstimmt, außer dass ein Indikator, beispielweise ein rotes Sternchen, hinzugefügt wird, der angibt, dass das Feld in bestimmten Listen erforderlich ist. Lassen Sie dann den get-Akzessor von ControlTemplate die Required-Eigenschaft des zugrunde liegenden Felds überprüfen und entweder Template oder AlternateTemplate zurückgeben.

  • Wenn Sie zahlreiche benutzerdefinierte Feldtypen verwenden möchten, die fast identisch gerendert werden, können Sie die Wiederverwendbarkeit von Code erhöhen, indem Sie separate Vorlagen für die Verwendung im Modus Neu und Bearbeiten verwenden. Im ersten Modus werden den untergeordneten Objekten dann Standardwerte zugewiesen, und im zweiten Modus werden aktuelle Werte zugewiesen. Dadurch könnte die Wiederholung der Zuweisungslogik in der CreateChildControls-Methode jeder einzelnen benutzerdefinierten Feldtypklasse vermieden werden. Wieder würde durch den get-Akzessor von ControlTemplate bestimmt, welche Vorlage auf der Grundlage des Steuerelementmodus verwendet wird.

  • Das Verwenden einer alternativen Vorlage kann auch hilfreich sein, wenn für das Feld spezielles Rendering auf bestimmten Websites, in Websitesammlungen oder Webanwendungen erforderlich ist. Stellen Sie sich beispielsweise eine Website für Menschen mit eingeschränkter Sicht, z. B. Farbenblindheit, vor. Der get-Akzessor von ControlTemplate kann den Wert von RenderContext untersuchen, um festzustellen, ob die spezielle Vorlage erforderlich ist, und um die entsprechende Vorlage zurückzugeben.

  • Für benutzerdefinierte Feldtypen, die von SPFieldNumber erben und manchmal, nicht jedoch immer, prozentual gerendert werden müssen, kann das Verwenden von zwei unterschiedlichen Renderingvorlagen zu einer großen Zeitersparnis bei der Entwicklung führen. Überschreiben Sie den get-Akzessor von ControlTemplate, um auf den Wert der SPFieldNumber.ShowAsPercentage-Eigenschaft zu reagieren.

Hinzufügen mehrerer Vorlagenzuordnungen

Sie können natürlich dem Feldrenderingsteuerelement, das Sie aus BaseFieldControl ableiten, weitere Renderingvorlagenzuordnungen hinzufügen. Dabei wird folgendes Muster empfohlen:

  • Erstellen Sie ein neues privates Feld vom Typ ITemplate.

  • Erstellen Sie eine neue öffentliche Eigenschaft als Wrapper um das private Feld, und legen Sie hierfür einen Namen wie UmstandVorlage fest, wobei mit Umstand der Umstand identifiziert wird, unter dem die Vorlage verwendet werden soll.

  • Erstellen Sie eine zweite öffentliche Eigenschaft, die einen String-Wert zurückgibt, und nennen Sie ihn UmstandVorlagenname.

  • Der get-Akzessor für UmstandVorlage soll das private Feld nur zurückgeben, wenn der zweite Wert nicht null ist. Andernfalls sollte das ITemplate-Feld zurückgegeben werden, das von UmstandVorlagenname benannt wird. Verwenden Sie hierzu die GetTemplateByName()-Methode.

  • Überschreiben Sie den get-Akzessor von ControlTemplate, um UmstandVorlage immer dann zurückzugeben, wenn Umstand den Wert true besitzt.

Verwenden von benutzerdefinierten Websteuerelementen als Vorlagen

Das benutzerdefinierte Feldrenderingsteuerelement erbt auch zwei spezielle ITemplate-Eigenschaften: CustomTemplate und CustomAlternateTemplate. Diese beiden Eigenschaften sind mit dem [PersistenceMode(PersistenceMode.InnerProperty)]-Attribut gekennzeichnet. Dies bedeutet, dass die zurückgegebenen ITemplate-Objekte kompiliert sind und innerhalb des Feldrenderingsteuerelements als geschachtelte Tags beibehalten werden. Das Verwenden von vorkompilierten Vorlagen bietet mehrere Vorteile: sie können beispielsweise einer Seite in einem visuellen Designer wie SharePoint Designer oder Visual Studio hinzugefügt werden, indem sie durch Ziehen und Ablegen aus der Designer-Toolbox verschoben werden. Es gibt jedoch auch Nachteile. Weitere Informationen zu Web-Benutzersteuerelementen und benutzerdefinierten Websteuerelementen finden Sie unter Web User Controls and Web Custom Controls und PersistenceModeAttribute.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps

Konzepte

Benutzerdefinierte Feldtypen

Gewusst wie: Erstellen einer benutzerdefinierten Feldklasse

Überprüfung von benutzerdefinierten Felddaten

Vorgehensweise: Erstellen einer benutzerdefinierten Feldwertklasse

Vorgehensweise: Erstellen einer benutzerdefinierten Feldtypdefinition

Rendern der Eigenschaften von benutzerdefinierten Feldtypen

Editor-Steuerelemente für Feldtypeigenschaften

Gewusst wie: Erstellen eines Feldrendering-Steuerelements

Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps