Heute stieß ich auf ein unangenehmes Verhalten von SharePoint als ich mir ein PageLayout gebaut habe. Das Problem war, dass mir nach dem initialen Deployen des PageLayouts eine unschöne Fehlermeldung beim direkten Betrachten der aspx-Seite im Browser angezeigt wurde.

Parserfehler
Beschreibung: Fehler beim Verarbeiten einer Resource, die für diese Anforderung erforderlich ist. Überprüfen Sie folgende Fehlerinformationen und ändern Sie die Quelldatei entsprechend.
Parserfehlermeldung: Auf einer Inhaltsseite, die Content-Steuerelemente enthält, sind direkt nur Content-Steuerelemente zulässig.

Fehlermeldung im PageLayout

Fehlermeldung im PageLayout

Normalerweise fange ich immer mit einem minimalen PageLayout an, dass ich dann im SharePoint Designer oder Sublime Text 2 (per WebDAV) anpasse und das mir einfach den Titel der Seite ausgibt. In diesem Layout benutze ich die üblichen Content-Controls zum Überschreiben der Placeholder PlaceHolderPageTitle, PlaceHolderAdditionalPageHead und PlaceHolderMain. Doch diesmal funktionierte das überhaupt nicht.

Also habe ich die Seite mit dem SharePoint Designer geöffnet.
Und siehe da, im PageLayout steht ab Zeile 14 sehr komisches Zeug …

<%@ Page Language="C#" Inherits="Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePointWebControls" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<asp:content contentplaceholderid="PlaceHolderPageTitle" runat="server">
	<SharePointWebControls:FieldValue id="PageTitle" FieldName="Title" runat="server"/>
</asp:content>
<asp:content contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">
</asp:content>
<asp:content contentplaceholderid="PlaceHolderMain" runat="server">
	<SharePointWebControls:FieldValue id="PageTitle2" FieldName="Title" runat="server"/>
</asp:content>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"><head><meta name="WebPartPageExpansion" content="full" /><!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:ContentType msdt:dt="string">Seitenlayout</mso:ContentType>
<mso:PublishingAssociatedContentType msdt:dt="string">;#MeinPageLayout;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39002327829F853940F90001A6F6C78AEC27;#</mso:PublishingAssociatedContentType>
</mso:CustomDocumentProperties>
</xml><![endif]--><title>MeinPageLayout</title></head>
Komisches PageLayout

Komisches PageLayout

Als ich das Problem genauer sah, kam es mir bekannt vor. Ich konnte mich aber nicht mehr daran erinnern was die Lösung war. Also musste Google her :).
Nach ein bisschen googlen war die Lösung dann aber schnell gefunden!
Clinton Cherry hat in seinem Blog schon 2007 darüber geschrieben http://clintoncherry.wordpress.com/2007/10/03/weird-content-controls-error-in-custom-sharepoint-page-layouts.

Das Problem ist das Content-Control, das ich mit kleinem c deklariert habe…
Es ist für SharePoint PageLayouts sehr wichtig, dass das C in <asp:Content> groß geschrieben wird!

Falsch:

<asp:content contentplaceholderid="PlaceHolderMain" runat="server">
	<SharePointWebControls:FieldValue id="PageTitle2" FieldName="Title" runat="server"/>
</asp:content>

Richtig:

<asp:Content contentplaceholderid="PlaceHolderMain" runat="server">
	<SharePointWebControls:FieldValue id="PageTitle2" FieldName="Title" runat="server"/>
</asp:Content>

Also habe ich alles angepasst und deployt.
Und schon lief alles wieder wie gewohnt :D.

Minimales PageLayout

Minimales PageLayout

Ich hoffe dieser Schnitzer wird mir so schnell nicht nochmal passieren. 🙂