4.1 upgrade issue: 4.0 custom content designer no longer works.
After upgrading to 4.1, I got the following error when I try to edit a content block:
A required control was not found in the template for "~/Controls/ContentBlockDesignerTemplate.ascx". The control must be assignable from type "Telerik.Sitefinity.Web.UI.ControlDesign.ContentSelector" and must have ID "sharedContentSelector".
I have a custom ContentBlockDesigner, basically a RadEditor with a few more buttons available than you normally see in Sitefinity. I assume that this message means that the old 4.0 method to override the editor now needs an extra control to interact with the 4.1 shared content block feature. Can someone let me know what that additional code should look like?
Here's my ~/Controls/ContentBlockDesignerTemplate.ascx if you're interested, but it's basically implemented as suggested in a prior message thread.
<%@ Control Language="C#" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields" TagPrefix="sf" %> <sf:ResourceLinks id="resourcesLinks" runat="server"> <sf:ResourceFile Name="Styles/Window.css" /></sf:ResourceLinks> <sf:FormManager ID="formManager" runat="server" /><div style="width: 660px; overflow: hidden;"> <sf:HtmlField ID="htmlEditor" runat="server" Width="99%" Height="370px" EditorToolsConfiguration="Custom" EditorConfigurations="~/Controls/ToolsFile.xml" EditorToolsConfigurationKey="ToolsFile" DisplayMode="Write" FixCursorIssue="True"> </sf:HtmlField></div><script type="text/javascript"> $("body").addClass("sfContentBlockDesigner");</script>Yeah, it would have changed...try this?
<%@ Control Language="C#" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields" TagPrefix="sf" %><%@ Register Assembly="Telerik.Sitefinity" TagPrefix="designers" Namespace="Telerik.Sitefinity.Web.UI.ControlDesign" %><sf:ResourceLinks id="resourcesLinks" runat="server"> <sf:ResourceFile Name="Styles/Window.css" /></sf:ResourceLinks><telerik:RadWindowManager ID="windowManager" runat="server" Behaviors="None" Skin="Sitefinity" ShowContentDuringLoad="false" VisibleStatusBar="false" VisibleTitleBar="true"> <Windows> <telerik:RadWindow ID="contentPages" runat="server" Height="250" Width="425" Modal="true" NavigateUrl="~/Sitefinity/Dialog/ContentPagesDialog" ReloadOnShow="true" Behaviors="Close" /> <telerik:RadWindow ID="preview" runat="server" Height="100" Width="100" Modal="true" NavigateUrl="~/Sitefinity/Dialog/ContentViewEditDialog?ControlDefinitionName=ContentBackend&ViewName=ContentBackendPreview&SuppressBackToButtonLabelModify=true" /> </Windows></telerik:RadWindowManager><div id="selectorTag" style="display: none;" class="sfDesignerSelector sfFlatDialogSelector"> <designers:ContentSelector ID="sharedContentSelector" runat="server" TitleText="<%$Resources:ContentResources, SelectSharedContentYouWantToUse %>" BindOnLoad="false" AllowMultipleSelection="false" WorkMode="List" SearchBoxInnerText="" ShowProvidersList="true" SearchBoxTitleText="<%$Resources:Labels, NarrowByTyping %>" ListModeClientTemplate="<span class='sfItemTitle'>Title</span><span class='sf_binderCommand_viewContentPages'>PagesCountUIString</span>"> </designers:ContentSelector></div><sf:PromptDialog ID="shareContentDialog" Title="<%$ Resources:ContentResources, SharedContent %>" TextFieldTitle="<%$ Resources:ContentResources, Title %>" runat="server" Width="350" Height="300" Mode="Input" AllowCloseButton="true" ShowOnLoad="false"> <Commands> <sf:CommandToolboxItem Text="<%$ Resources:ContentResources, ShareThisContent %>" CommandName="shareContent" CommandType="SaveButton" WrapperTagName="LI" /> <sf:CommandToolboxItem Text="<%$ Resources:Labels, Cancel %>" CommandName="cancel" CommandType="CancelButton" WrapperTagName="LI" /> </Commands></sf:PromptDialog><sf:PromptDialog ID="unshareContentDialog" Message="<%$ Resources:ContentResources, AreYouSureYouWantToUnshareThisContent %>" runat="server" Width="300" Height="300" Mode="Confirm" AllowCloseButton="true" InputRows="5" ShowOnLoad="false"> <Commands> <sf:CommandToolboxItem Text="<%$ Resources:ContentResources, UnshareThisContent %>" CommandName="unshareContent" CommandType="NormalButton" WrapperTagName="LI" /> <sf:CommandToolboxItem Text="<%$ Resources:Labels, Cancel %>" CommandName="cancel" CommandType="CancelButton" WrapperTagName="LI" /> </Commands></sf:PromptDialog><sf:FormManager ID="formManager" runat="server" /><div id="editView" class="sfContentBlocksDesignerWrp"> <sf:HtmlField ID="htmlEditor" runat="server" Width="99%" Height="370px" EditorContentFilters="DefaultFilters" EditorStripFormattingOptions="MSWord,Css,Font,Span,ConvertWordLists" DisplayMode="Write" FixCursorIssue="True"> </sf:HtmlField> <sf:CommandBar id="editViewCommandBar" runat="server" WrapperTag="div" WrapperCssClass="sfContentBlocksBtnAreaBottom"> <Commands> <sf:CommandToolboxItem runat="server" CommandName="selectSharedContent" CommandType="NormalButton" CssClass="sfChange" Text="<%$Resources:ContentResources, SelectFromExistingSharedContent %>" /> <sf:CommandToolboxItem runat="server" CommandName="shareContent" CommandType="NormalButton" CssClass="sfChange" Text="<%$Resources:ContentResources, ShareThisContentAcrossPages %>" /> </Commands> </sf:CommandBar> </div><div id="previewAndEditContentView" class="sfContentBlocksDesignerWrp"> <div class="sfNeutral sfClearfix"> <asp:Label ID="sharedContentLabel" runat="server" Text="<%$Resources:ContentResources, ThisContentIsShared %>"></asp:Label> <asp:HyperLink ID="viewPagesLink" runat="server" NavigateUrl="javascript:void(0);" CssClass=""> <asp:Literal ID="viewPagesLiteral" runat="server" Text="<%$Resources:ContentResources, ViewAffectedPages %>" /> </asp:HyperLink> <div id="editOutDatedContentView"> <span class="sfFailure"> <asp:Literal ID="newerVersionLabel1" runat="server" Text="<%$Resources:ContentResources, ThereIsNewerVersionOfThisContent %>" /> <asp:HyperLink ID="previewLink" runat="server" NavigateUrl="javascript:void(0);" CssClass=""> <asp:Literal ID="previewLiteral" runat="server" Text="<%$Resources:Labels, Preview %>" /> </asp:HyperLink> <asp:Literal ID="orLabel" runat="server" Text="<%$Resources:Labels, or %>" /> <asp:HyperLink ID="updateLink" runat="server" NavigateUrl="javascript:void(0);" CssClass=""> <asp:Literal ID="updateLiteral" runat="server" Text="<%$Resources:Labels, Update %>" /> </asp:HyperLink> <asp:Literal ID="newerVersionLabel2" runat="server" Text="<%$Resources:ContentResources, WithTheNewerVersion %>" /> </span> </div> <sf:CommandBar id="commandBar" runat="server" WrapperTag="div" WrapperCssClass="sfContentBlocksBtnAreaTop"> <Commands> <sf:CommandToolboxItem runat="server" CommandName="editContent" CommandType="NormalButton" CssClass="sfChange" Text="<%$Resources:ContentResources, EditThisContent %>" /> <sf:CommandToolboxItem runat="server" CommandName="unshareContent" CommandType="NormalButton" CssClass="sfChange" Text="<%$Resources:ContentResources, Unshare %>" /> </Commands> </sf:CommandBar> </div> <sf:SitefinityLabel id="contentLabel" runat="server" WrapperTagName="div" CssClass="sfSharedContentPreviewWrp"></sf:SitefinityLabel> <sf:HtmlField ID="contentEditor" runat="server" Width="99%" Height="370px" EditorContentFilters="DefaultFilters" EditorStripFormattingOptions="MSWord,Css,Font,Span,ConvertWordLists" DisplayMode="Write" FixCursorIssue="True"> </sf:HtmlField></div><sf:ClientLabelManager id="clientLabelManager" runat="server"> <Labels> <sf:ClientLabel ClassId="ContentResources" Key="ThisContentIsShared" runat="server" /> <sf:ClientLabel ClassId="ContentResources" Key="ThisContentIsSharedAccross" runat="server" /> <sf:ClientLabel ClassId="ContentResources" Key="ViewAffectedPages" runat="server" /> <sf:ClientLabel ClassId="PageResources" Key="Page" runat="server" /> <sf:ClientLabel ClassId="PageResources" Key="Pages" runat="server" /> <sf:ClientLabel ClassId="Labels" Key="Back" runat="server" /> <sf:ClientLabel ClassId="Labels" Key="SaveChanges" runat="server" /> <sf:ClientLabel ClassId="Labels" Key="Save" runat="server" /> </Labels></sf:ClientLabelManager><script type="text/javascript"> $("body").addClass("sfContentBlockDesigner");</script>Hi Steve,
The error you get is thrown when parsing the template for your custom designer. We've switched to a virtual path provider in 4.1 and the old way of defining the template for your custom controls - although working in many cases - is now obsolete. I've written a blog post describing how to make your custom control work with this new feature, which you can read here. Please apply those changes and let me know if the problem is not resolved.
Best wishes,Hey Slavo,
It's not me who had the issue, it's dan...
But I don't think that's what his problem is. He has an external view mapped to the Html control and you guys added in the shared content bits which it can't now find in his template.
A required control was not found in the template for
"~/Controls/ContentBlockDesignerTemplate.ascx". The control must be
assignable from type
"Telerik.Sitefinity.Web.UI.ControlDesign.ContentSelector" and must have
ID "sharedContentSelector".
Slavo,
I *think* that Steve is on the right track. I haven't had time to implement the long fix. So for now, I removed the custom HTML editor (RadEditor with extra toolbar buttons). Now we're back to Sitefinity's basic HTML editor. As soon as I get time, I'd like to add more buttons back into RadEditor. I just need to know if 4.1 requires additional things in the ContentBlockDesignerTemplate to make it work.
Thanks,
Dan
FYI, that fix worked for me Dan (same issue) ;)
The backend code (SimpleView?) references controls on the template it's mapped to. You've set the external template to be in your root.
So this "A required control was not found in the template"
Denotes that it FOUND the external template, it just cant find a control anywhere there with the ID of "sharedContentSelector" which makes sense since that is a new control in this view as of 4.1.
Had it not found the template you'd be getting an entirely different YSOD with some sort of generic cant find layout template error...
Steve,
Just clarifying an ambigutiy, when you say, 'that fix worked', were you talking about your posted fix, or Slavo's?
Thanks,
Dan
Mine worked ;)
Slavos fix is for custom widget layouts...not external template mapping
Hi Guys,
After upgrading this afternoon I am also having the exact same issue as Dan. I have added the code that Steve provided to get the original editor back but I cannot attach my ToolsFile.xml.
Basically all I want to do is add back my custom css classes as a dropdown.
My original code is below:
ContentBlockDesignerTemplate
<%@ Control Language="C#" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %><%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields" TagPrefix="sf" %> <sf:ResourceLinks id="resourcesLinks" runat="server"> <sf:ResourceFile Name="Styles/Window.css" /></sf:ResourceLinks><sf:FormManager ID="formManager" runat="server" /><div style="width: 660px; overflow: hidden;"> <sf:HtmlField ID="htmlEditor" runat="server" Width="99%" Height="370px" EditorToolsConfiguration="Custom" EditorConfigurations="~/Controls/ToolsFile.xml" EditorToolsConfigurationKey="ToolsFile" DisplayMode="Write" FixCursorIssue="True"> </sf:HtmlField></div><script type="text/javascript"> $("body").addClass("sfContentBlockDesigner");</script><root> <cssFiles> <item name="~/Controls/CustomClasses.css" /> </cssFiles> <tools name="MainToolbar" dockable="false"> <tool name="Bold" shortcut="CTRL+B"/> <tool name="Italic" shortcut="CTRL+I"/> <tool name="JustifyLeft" /> <tool name="JustifyCenter" /> <tool name="JustifyRight" /> <tool name="JustifyFull" /> <tool name="InsertOrderedList" /> <tool name="InsertUnorderedList" /> <tool name="InsertTable" /> <tool separator="true"/> <tool name="Undo" shortcut="CTRL+Z"/> <tool name="Redo" shortcut="CTRL+Y"/> <tool separator="true"/> <tool name="ImageManager" text="Insert an image"/> <tool name="DocumentManager" text="Insert a document"/> <tool name="LinkManager" text="Insert a link" shortcut="CTRL+K"/> <tool name="Unlink" shortcut="CTRL+SHIFT+K"/> <tool name="FlashManager"/> <tool name="MediaManager"/> <tool separator="true"/> <tool name="AjaxSpellCheck" shortcut="F7"/> <tool name="PasteFromWordNoFontsNoSizes" /> <tool name="PastePlainText" /> <tool separator="true"/> <tool name="ApplyClass" /> <tool name="FormatStripper"/> <tool separator="true"/> </tools></root>What if instead of mapping to this View...what if you go to a Lower level and map the HtmlField View external. That way you can directly modify the RadEditor itself?
Any pointers on how I can do this Steve?
Do we know if there has been any updates in the latest version to make this easier like it was in v3.7?
I have a copy of that view somewhere here I think I can dig up
Q2 will allow you to tweak all these things in the Admin area, so you wont need external views...so a fix is coming ;)
Steve. You da man!! The code you posted on 4/19/11 above worked for me on version 4.2.1733.0. I have been trying to fix this for about 6 hours!!! So thank you!!!