Forums

Skip Navigation LinksHome / Developer Network / Forums / Sitefinity: General Discussions > 4.1 upgrade issue: 4.0 custom content designer no longer works.

4.1 upgrade issue: 4.0 custom content designer no longer works.

  • Posted on Apr 19, 2011 (permalink)

    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>

    I'll disable my custom editor for now to work around the issue, but I it would be helpful to know what additional code is needed to override the editor in 4.1.

    Thank you!
    Dan

    Reply

  • Posted on Apr 19, 2011 (permalink)

    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>

    Reply

  • Slavo Slavo admin's avatar

    Posted on Apr 22, 2011 (permalink)

    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,
    Slavo
    the Telerik team

    Reply

  • Posted on Apr 22, 2011 (permalink)

    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".

    Reply

  • Posted on Apr 22, 2011 (permalink)

    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

    Reply

  • Posted on Apr 22, 2011 (permalink)

    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...

    Reply

  • Posted on Apr 22, 2011 (permalink)

    Steve,

    Just clarifying an ambigutiy, when you say, 'that fix worked', were you talking about your posted fix, or Slavo's?

    Thanks,
    Dan

    Reply

  • Posted on Apr 22, 2011 (permalink)

    Mine worked ;)

    Slavos fix is for custom widget layouts...not external template mapping

    Reply

  • Richard Turner avatar

    Posted on May 10, 2011 (permalink)

    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>

    ToolsFile.xml

    <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>

    Any help would be greatly appreciated.
    thanks
    Richard

    Reply

  • Posted on May 10, 2011 (permalink)

    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?

    Reply

  • Richard Turner avatar

    Posted on May 10, 2011 (permalink)

    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?

    Reply

  • Posted on May 10, 2011 (permalink)

    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 ;)

    Reply

  • Ben avatar

    Posted on Feb 9, 2012 (permalink)

    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!!!

    Reply

Skip Navigation LinksHome / Developer Network / Forums / Sitefinity: General Discussions > 4.1 upgrade issue: 4.0 custom content designer no longer works.