Wednesday, 25 November 2015

Exception “Only Content controls are allowed directly in a content page that contains Content controls.” while creating page from the custom page layout : SharePoint Online / Office 365

Hi All,
New problem in SharePoint Online world :) and solution :).
In this article I will explain how the exception “Only Content controls are allowed directly in a content page that contains Content controls.” occurs and solution to it.
Background : For our SharePoint online application we were working on new custom page layout. Our page layout is very simple and as such no major changes. So we just downloaded OOB “Article Page” layout and opened it in Visual Studio (Visual Studio 2015 community edition), modified it and manually uploaded in “Master Page” gallery. Set the “Content Type” as “Page Layout” content type and “Associated Content Type” as our custom content type. We made page layout available from the “Page Layout and Site Template Settings” for creating the pages. 
So next step is to create the content page from our custom page layout and verify it. Content page successfully get created but when we open the page it throws an following exception as
Figure 1 : Exception on page which is created from new custom page layout
Sorry, something went wrong
Only Content controls are allowed directly in a content page that contains Content controls.
Troubleshoot issues with Microsoft SharePoint Foundation.
Correlation ID: 034a449d-d02b-2000-1648-733d4593b008
Date and Time: 11/22/2015 7:46:39 PM
Only the above exception and not much details. Googled bit but no luck. Also went through the page layout in visual studio again but seems to be no issues. 
So finally I downloaded the our page layout from “Master Page” gallery and surprisingly found that there were below extra commented code added at the bottom of the page layout after the closing section of “PlaceHolderMain” control place holder:
<%--<div class="captioned-image">
<div class="image">
<PublishingWebControls:RichImageField FieldName="PublishingPageImage" runat="server"/>
<div class="caption">
<PublishingWebControls:RichHtmlField FieldName="PublishingImageCaption"  AllowTextMarkup="false" AllowTables="false" AllowLists="false" AllowHeadings="false" AllowStyles="false" AllowFontColorsMenu="false" AllowParagraphFormatting="false" AllowFonts="false" PreviewValueSize="Small" AllowInsert="false" AllowEmbedding="false" AllowDragDrop="false" runat="server"/>
Root Cause / Solution : This type of issue there also previously we have in on premises but with different exception message like "No parameterless constructor defined for this object". 
After again going through the page layout, it seems to be problem with casing of <asp:content> tagThere were mismatch between casing of opening and closing of <asp:content> tag
Opening tag is - <asp:Content> : C in Content is capital case and
Closing tag is - </asp:content> : c in Content is small case
It should always be capital ‘C’ in Content of opening as well as in closing tag like <asp:Content> </asp:Content>

"No parameterless constructor defined for this object"

We corrected our page layout and problem went away :)
Enjoy Reading :)
As usual any comment / suggestion / feedback / question always welcome :)