ValueFactory InvalidOperationException when using macro recursively include child pages
tl;dr Version: I'm getting an InvalidOperationException exception "ValueFactory attempted to access the Value property of this instance." when trying to use a macro to include child pages and one of those children uses the same macro to include its children.
I'm using Umbraco 7.2.8 with ASP.NET Masterpages, but I've transitioned all of my macros to use Partial View Macros.
I'm using Umbraco to host a website for a college course. I want to divide our course syllabus into a series of nested pages so I can link to things on a very granular level. Here's my general page structure for this:
If the user goes to the Course Textbook page, they should just see that section. If they go to the Course Materials page, they should see both child pages of that node. If they go to the top level Syllabus page, they should see everything included.
At each of the parent levels, I'm using a macro that runs a foreach loop to display the bodyText field of the CurrentPage.Children nodes. This works OK from Level 2, but at Level 1 where its children call the same macro, I get a InvalidOperationException exception "ValueFactory attempted to access the Value property of this instance."
I've tried all sorts of different ways of accessing the bodyText property with the child contents (dynamic type, strongly typed, helper class) and they all end up with a similar stack trace:
2015-11-19 21:19:52,000 [11] WARN umbraco.macro - [P3972/T1/D2] Error loading partial view macro (View: ~/Views/MacroPartials/CS101IncludeChildPages.cshtml). Exception: System.InvalidOperationException: ValueFactory attempted to access the Value property of this instance.
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedProperty.get_Value()
at Umbraco.Web.Models.DynamicPublishedContent.TryGetUserProperty(GetMemberBinder binder)
at Umbraco.Web.Models.DynamicPublishedContent.<>c__DisplayClass9.<TryGetMember>b__6(Func`2 m)
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at Umbraco.Web.Models.DynamicPublishedContent.TryGetMember(GetMemberBinder binder, Object& result)
at CallSite.Target(Closure , CallSite , Object )
at ASP._Page_Views_MacroPartials_CS101IncludeChildPages_cshtml.Execute() in c:\Web-Dir\umbraco\Views\MacroPartials\CS101IncludeChildPages.cshtml:line 15
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Core.Profiling.ProfilingView.Render(ViewContext viewContext, TextWriter writer)
at Umbraco.Web.Mvc.ControllerExtensions.RenderViewResultAsString(ControllerBase controller, ViewResultBase viewResult)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, IPublishedContent content)
at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, INode node)
at umbraco.macro.LoadPartialViewMacro(MacroModel macro)
at umbraco.macro.renderMacro(Hashtable pageElements, Int32 pageId)
Is this a bug? The only solution I've found is to call RenderTemplate with a template that just includes bodyText, but this seems like a kludgy solution. Anyone have any better ideas?
ValueFactory InvalidOperationException when using macro recursively include child pages
tl;dr Version: I'm getting an InvalidOperationException exception "ValueFactory attempted to access the Value property of this instance." when trying to use a macro to include child pages and one of those children uses the same macro to include its children.
I'm using Umbraco 7.2.8 with ASP.NET Masterpages, but I've transitioned all of my macros to use Partial View Macros.
I'm using Umbraco to host a website for a college course. I want to divide our course syllabus into a series of nested pages so I can link to things on a very granular level. Here's my general page structure for this:
If the user goes to the Course Textbook page, they should just see that section. If they go to the Course Materials page, they should see both child pages of that node. If they go to the top level Syllabus page, they should see everything included.
At each of the parent levels, I'm using a macro that runs a foreach loop to display the bodyText field of the CurrentPage.Children nodes. This works OK from Level 2, but at Level 1 where its children call the same macro, I get a InvalidOperationException exception "ValueFactory attempted to access the Value property of this instance."
I've tried all sorts of different ways of accessing the bodyText property with the child contents (dynamic type, strongly typed, helper class) and they all end up with a similar stack trace:
Is this a bug? The only solution I've found is to call RenderTemplate with a template that just includes bodyText, but this seems like a kludgy solution. Anyone have any better ideas?
is working on a reply...