Retrieve dynamic module content from its parent page

Posted by Community Admin on 05-Aug-2018 18:04

Retrieve dynamic module content from its parent page

All Replies

Posted by Community Admin on 19-Aug-2013 00:00

I'm trying to find a way to retrieve a dynamic module I've created from the page to which I added it.  I can't figure out how to get the page itself to tell me about any dynamic modules it may have, nor can I figure out how to have the module itself tell me which page is its parent.

I'm using the PageManager to retrieve the page, and I know I can use the DynamicModuleManager to retrieve the modules by type, but how do I find that relationship in code?

Edit: I should probably have mentioned that I have a custom MVC widget that I created to display my module data.  I did manage to find a way to accomplish this, but I'd be happy to hear any alternative solutions.

My code looks something like this:

PageManager pm = PageManager.GetManager();
PageNode videoParent = pm.GetPageNode(pageID);
             
DynamicModuleManager dmm = DynamicModuleManager.GetManager();
Type videoType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.VideoLibrary.Video");
 
if (videoParent.Page.Controls != null && videoParent.Page.Controls.Count > 0)
    //this is making the assumption that I have one and only one MVC video widget on the page
    List<PageControl> videoControls = videoParent.Page.Controls.Where(ctrl => ctrl.ObjectType == "Telerik.Sitefinity.Mvc.Proxy.MvcControllerProxy").ToList();
    if (videoControls.Count == 1)
    
        Control c = pm.LoadControl(videoControls.First());  //convert the control into a System.Web.UI Control
        //as a Control, it doesn't have the properties on it I needed, but it could be converted to a MvcControllerProxy, which did have the data on it
        string id = ((MvcControllerProxy)c).Settings.Values["VideoID"] as string;  //Settings is dynamically generated, so you need to inspect the Values property to see what's there
        Guid videoID = new Guid(id);
        Telerik.Sitefinity.DynamicModules.Model.DynamicContent videoContent = dmm.GetDataItem(videoType, videoID);
        //do stuff with the videoContent object
    

This thread is closed