Freigeben über


Erstellen benutzerdefinierter Formularvorlagen

Letzte Änderung: Mittwoch, 22. September 2010

Gilt für: SharePoint Foundation 2010

Die Microsoft ASP.NET-Steuerelementvorlagen, die in der Datei DefaultTemplates.ascx unter %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES\ definiert sind, bestimmen das Layout von Microsoft SharePoint Foundation 2010-Listenelementformularen. Diese Vorlagen können Steuerelemente schachteln, die ihrerseits wiederum weitere Steuerelementvorlagen für die Formularlayoutdefinition verwenden. Die Steuerelemente können HTML-Markup und Websteuerelemente, jedoch keine datengebundenen Anweisungen enthalten, die die Syntax <%#...%> verwenden. Um eine Standardsteuerelementvorlage global auf einem Front-End-Webserver außer Kraft zu setzen, können Sie eine benutzerdefinierte ASCX-Datei mit einer Steuerelementvorlagen-ID, die der ID der vorhandenen Vorlage in der Datei DefaultTemplates.ascx entspricht, zum Verzeichnis \CONTROLTEMPLATES hinzufügen. Informationen zum Erstellen eines Benutzersteuerelements in Microsoft Visual Studio finden Sie unter Gewusst wie: Erstellen eines Benutzersteuerelements für eine SharePoint-Anwendungsseite oder ein SharePoint-Webpart.

Erstellen benutzerdefinierter Vorlagen

Sie können nicht nur Standardvorlagen außer Kraft setzen, sondern auch eigene benutzerdefinierte Formularvorlagen erstellen und anhand des Listentyps oder des Inhaltstyps auf sie verweisen. Um eine benutzerdefinierte Formularvorlage anhand des Listentyps zu registrieren, geben Sie, wie im folgenden Beispiel gezeigt, den Namen der Formularvorlage mithilfe des Template-Attributs in einem <Form>-Tag in der Datei Schema.xml der Listendefinition an.

<Forms>
  <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" /> 
  <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" /> 
  <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" Template="MyCustomForm" WebPartZoneID="Main" /> 
</Forms>

Im folgenden Beispiel werden zwei zusätzliche benutzerdefinierte Formulare definiert.

<Forms>
  <Form 
    Type="DisplayForm" 
    Url="DispForm.aspx" 
    SetupPath="pages\form.aspx" 
    WebPartZoneID="Main" Default="FALSE"/>
  <Form 
    Type="DisplayForm" 
    Url="MyDispForm.aspx" 
    SetupPath="pages\form.aspx" 
    WebPartZoneID="Main" 
    UseDefaultListFormWebPart="False" 
    Default="TRUE">
    <WebParts>
      <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="3"><![CDATA[
        <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
          <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly
          <TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
          <PageType>PAGE_DISPLAYFORM</PageType>
        </WebPart>]]>
      </AllUsersWebPart>
      <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1"><![CDATA[
        <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
          <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
          <TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName>
          <PageType>PAGE_VIEW</PageType>
          <ViewFlags>Hidden ReadOnly Html</ViewFlags>
        </WebPart>]]>
      </AllUsersWebPart>
    </WebParts>
  </Form>
  <Form 
    Type="EditForm" 
    Url="EditForm.aspx" 
    SetupPath="pages\form.aspx" 
    WebPartZoneID="Main" />
  <Form
    Type="EditForm"
    Url="MyEditForm.aspx"
    SetupPath="pages\form.aspx"
    WebPartZoneID="Main"
    Default="TRUE"
    UseDefaultListFormWebPart="False"
    WebPartOrder="1">
    <WebParts>
      <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1"><![CDATA[
         <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
           <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>                         
           <TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName>
           <PageType>PAGE_VIEW</PageType>
           <ViewFlags>Hidden ReadOnly Html</ViewFlags>
         </WebPart>]]>
       </AllUsersWebPart>
       <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2"><![CDATA[
         <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2" xmlns:iwp="https://schemas.microsoft.com/WebPart/v2/Image">
           <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
           <TypeName>Microsoft.SharePoint.WebPartPages.ImageWebPart</TypeName>
           <FrameType>None</FrameType>
           <Title>Site Image</Title>
           <iwp:ImageLink>/_layouts/images/homepage.gif</iwp:ImageLink>
           <iwp:AlternativeText>Logo</iwp:AlternativeText>
         </WebPart>]]>
       </AllUsersWebPart>
       <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="3"><![CDATA[
         <WebPart xmlns="https://schemas.microsoft.com/WebPart/v2">
           <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>            
           <TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
           <PageType>PAGE_EDITFORM</PageType>
         </WebPart>]]>
       </AllUsersWebPart>
       <View BaseViewID="1" WebPartZoneID="Main" WebPartOrder="4" />
     </WebParts>
   </Form>
   <Form 
     Type="NewForm" 
     Url="NewForm.aspx" 
     SetupPath="pages\form.aspx" 
     WebPartZoneID="Main" />
</Forms>

Zum Registrieren einer benutzerdefinierten Formularvorlage anhand des Inhaltstyps fügen Sie eine Definition wie die folgende als untergeordnetes Element des <ContentType>-Tags zur Datei Elements.xml für das Feature hinzu.

<XmlDocuments>
  <XmlDocument NamespaceURI="https://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
    <FormTemplates  xmlns="https://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
      <Display>MyCustomForm</Display>
      <Edit>MyCustomForm</Edit>
      <New>MyCustomForm</New>
    </FormTemplates>
  </XmlDocument>
</XmlDocuments>

Im vorherigen Beispiel ist "MyCustomForm" die ID einer benutzerdefinierten Formularvorlage, die Sie zum Verzeichnis \CONTROLTEMPLATES hinzufügen.

Vorlagenstruktur

ASCX-basierte Steuerelementvorlagen verbinden mehrere Steuerelemente zu einer geschachtelten Struktur, wobei die Steuerelemente ihrerseits aus Vorlagen bestehen und verwendet werden können, um Listenelementformulare zu erweitern.

Die in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES definierte Dokumentbibliotheks-Formularvorlage liefert ein gutes Beispiel für die Struktur einer Steuerelementvorlage. Das folgende Beispiel zeigt die Standardsteuerelementvorlage, die für das Dokumentbibliotheksformular definiert ist.

<SharePoint:RenderingTemplate ID="DocumentLibraryForm" runat="server">
  <Template>
    <SharePoint:InformationBar runat="server"/>
      <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator="&nbsp;" runat="server">
        <Template_RightButtons>
          <SharePoint:SaveButton runat="server"/>
          <SharePoint:GoBackButton runat="server"/>
        </Template_RightButtons>
      </wssuc:ToolBar>
    <SharePoint:FormToolBar runat="server"/>
    <SharePoint:FormComponent TemplateName="DocumentLibraryFormCore" runat="server"/>
  </Template>
</SharePoint:RenderingTemplate>

In diesem Beispiel verbindet die Dokumentbibliotheks-Formularvorlage mehrere Komponenten, um die ganze Formularvorlage zu gestalten. Viele dieser Komponenten leiten sich von der Microsoft.SharePoint.WebControls.FormComponent-Basisklasse ab, die ihrerseits von Microsoft.SharePoint.WebControls.TemplateBasedControl abgeleitet ist und bedeutet, dass die Komponenten ihrerseits zu Vorlagen gemacht werden können.

Tatsächlich wird der Großteil des Formulars jedoch durch eine in der Datei DefaultTemplates.ascx definierte separate Vorlage mit der ID DocumentLibraryFormCore gerendert. Diese Vorlage besteht ihrerseits aus verschiedenen Komponenten, einschließlich einiger tabellenbasierter HTML-Strukturen, um die Strukturierung des Seitenlayouts zu unterstützen, wie in diesem Beispiel gezeigt wird.

<SharePoint:RenderingTemplate ID="DocumentLibraryFormCore" runat="server">
  <Template>
    <TABLE class="ms-formtable" style="margin-top: 8px;" border=0 cellpadding=0 id="formTbl" cellspacing=0 width=100%>
      <SharePoint:ChangeContentType runat="server"/>
      <SharePoint:DocumentLibraryFields runat="server"/>
      <SharePoint:ApprovalStatus runat="server"/>
    </TABLE>

    <SharePoint:WebPartPageMaintenanceMessage runat="server"/>
    <SharePoint:DocumentTransformersInfo runat="server"/>
    <table cellpadding=0 cellspacing=0 width=100%><tr><td class="ms-formline"><IMG SRC="/_layouts/images/blank.gif" width=1 height=1 alt=""></td></tr></table>
    <TABLE cellpadding=0 cellspacing=0 width=100% style="padding-top: 7px"><tr><td width=100%>
      <SharePoint:ItemHiddenVersion runat="server"/>
      <SharePoint:InitContentType runat="server"/>
      <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbl" RightButtonSeparator="&nbsp;" runat="server">
        <Template_Buttons>
          <SharePoint:CreatedModifiedInfo runat="server"/>
        </Template_Buttons>
        <Template_RightButtons>
          <SharePoint:SaveButton runat="server"/>
          <SharePoint:GoBackButton runat="server"/>
        </Template_RightButtons>
      </wssuc:ToolBar>
    </td></tr></TABLE>
  </Template>
</SharePoint:RenderingTemplate>

Eine zentrale Komponente in der DocumentLibraryFormCore-Vorlage dieses Beispiels ist die DocumentLibraryFields-Komponente, die auf das Microsoft.SharePoint.WebControls.DocumentLibraryFields-Steuerelement verweist, das sich von der Microsoft.SharePoint.WebControls.ListFieldIterator-Klasse ableitet. Der Listenfelditerator enthält die Logik für die spaltenförmige Anordnung von Feldern. Die ListFieldIterator-Klasse rendert Steuerelemente jedoch nur, wenn sie nicht in den Vorlagen außer Kraft gesetzt wurden. Wenn Sie ein Feldsteuerelement für ein bestimmtes Feld (beispielsweise ein Steuerelement, das das Feldsteuerelement Titel in der oberen rechten Ecke und das Feldsteuerelement Autor unter dem Titel platziert) hinzufügen, wird dieses Steuerelement daher vom Iterator nicht gerendert. Sie haben stattdessen auch die Möglichkeit, einen eigenen von der ListFieldIterator-Klasse abgeleiteten Listenfelditerator anzugeben und benutzerdefinierte Logik für die Felditeration bereitzustellen.

Sie können die DocumentLibraryForm-Vorlage außer Kraft setzen und eine andere DocumentLibraryFormCore-Vorlage angeben. Anschließend können Sie die Formularvorlage auf dieser Grundlage weiter anpassen, indem Sie vorhandene Steuerelemente angeben oder Verweise auf andere benutzerdefinierte Steuerelemente hinzufügen, die in einer Assembly oder ASCX-Datei definiert sind.

Wichtiger HinweisWichtig

Die Bearbeitung der Default.ascx-Dateien, die von SharePoint Foundation auf Front-End-Webservern installiert werden, wird nicht unterstützt. Änderungen, die Sie an Dateien vornehmen, die ursprünglich mit dem Produkt installiert wurden, können überschrieben werden, wenn Sie Updates oder Service Packs für SharePoint Foundation installieren oder wenn Sie für eine Installation ein Upgrade auf die nächste Produktversion durchführen.