We've been setting up a bunch of custom (routed) pages in plugin code, and we're using a content fragment to add specific widgets to these pages. To make life easier, I've added a function to help us do this without defining a load of individual XML strings for each widget, but apart from that it's pretty much following your examples.
One thing I ran across yesterday on my local PC (devmode=true) was I first had one of the routed pages set to the wrong ID & nothing was being output, so I corrected the Widget GUID but it still didn't show the widget.
In the end (clutching at straws) I changed the internal names to add a version to the end of the string (but didn't change the routing URL)..
This ended up working!
So where is it caching this setup? I'd rebooted the whole PC & it still didn't clear it, so it can't be a memory cache.
I've included my full code below.
using Telligent.Evolution.Extensibility.Urls.Version1; namespace Something.CustomPages { public class CustomPages : INavigable { public string Name => "Custom Pages"; public string Description => "Custom Pages"; public void Initialize() { } void INavigable.RegisterUrls(IUrlController controller) { // First parameter must be unique amongst all other pages // Second parameter is the URL // Fifth is the human-readable page title.. this might be visible in the Custom Pages panel, but isn't visible to the users // Sixth is generally a call to GetSinglePageWidgetDefinition.. the first param is a repeat of the unique page name but doesn't seem to matter // second param is the widget GUID controller.AddPage("e14-cookies8", "about-cookies", null, null, "e14 About Cookies8", GetSinglePageWidgetDefinition("e14-cookies8", "8c32bca5-4437-414a-8ebb-3460accf9941")); // SINGLE PAGE WIDGET // Helper method that simplifies adding a single widget to a custom page PageDefinitionOptions GetSinglePageWidgetDefinition(string PageName, string WidgetGUID) { return new PageDefinitionOptions { HasApplicationContext = false, SetCustomPageOutput = (context, outputController) => { }, ParseContext = (context) => { }, Validate = (context, accessController) => { }, DefaultPageXml = GetSinglePageWidgetFragment(PageName, WidgetGUID) }; } // Return a standard XML fragment that represents a single widget on a page string GetSinglePageWidgetFragment(string PageName, string WidgetGUID) { WidgetGUID = WidgetGUID.Replace("-", ""); return $@"<contentFragmentPage pageName=""{PageName}"" isCustom=""false"" layout=""Content""> <regions> <region regionName=""Content"" > <contentFragments> <contentFragment type=""Telligent.Evolution.ScriptedContentFragments.ScriptedContentFragment, Telligent.Evolution.Platform::{WidgetGUID}"" showHeader=""False"" cssClassAddition=""no-wrapper with-spacing responsive-1"" isLocked=""False"" configuration="""" /> </contentFragments> </region> </regions> <contentFragmentTabs /> </contentFragmentPage>"; } } } }