Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 12:04
    Danny Winbourne
    0

    Dynamic XML issue

     

    This one is driving me mad, so I am hoping someone can help!!

    I have a "Related Links" property on my page, which links to several other pages in the site.

    I loop though each one with

     

    @foreach (var item in pageModel.carouselItems.BaseElement.Elements("link"))
    { dynamic carouselItem = new DynamicNode(@item.Attribute("link").Value); }

    Each, "carouselItem" has got various properties, but the one I am having issues with is a "URL Picker", property name "captionUrl" (from Ucomponents).

    If I output "carouselItem.captionUrl", I get "umbraco.MacroEngines.DynamicXml"

    But, if I try "carouselItem.captionUrl.url", I get an error "'string' does not contain a definition for 'url'"

     

    @item.Attribute("link").Value is pushing out ints, one of which is "1072", so I tried the following code:

     


            int number = 1072;
            dynamic testNode = new DynamicNode(number);
            <div> @testNode.captionUrl.url</div>

    The above works fine, and outputs the URL as expected.

    So, I tried setting an int value to @item.Attribute("link").Value. The following code shows that it is being set correctly as an int:

     

            int number2 = int.Parse(@item.Attribute("link").Value.ToString());
            <div>Number: @number2 Type: @number2.GetType()</div>

    The output of the above is:

    Number: 1072 Type: System.Int32

    So, I tried combining the above:

            int number3 = int.Parse(@item.Attribute("link").Value.ToString());
            dynamic testNode2 = new DynamicNode(number3);
            <div> @testNode2.captionUrl.url</div>

    But, the above code gives me the same error,  I get an error "'string' does not contain a definition for 'url'"

    I just don't get it, if I change the code to the following:

            int number3 = 1072;
            dynamic testNode2 = new DynamicNode(number3);
            <div> @testNode2.captionUrl.url</div>

    It works without error, but as soon as I dynamically set the nodeId, if errors!!

    Anyone got any suggestions?

    Thanks

  • Jeroen Breuer 4861 posts 12138 karma points MVP 3x admin c-trib
    Jan 31, 2012 @ 12:35
    Jeroen Breuer
    0

    Hmm that is strange. What version of Umbraco are you using? DynamicXml has been changed a couple of times.

    Jeroen

  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 12:38
    Danny Winbourne
    0

    I am using version 4.7.1, which is one down from the very latest I beleive. (which is 4.7.1.1 if I am not mistaken)

    Cheers
    Danny 

  • Jeroen Breuer 4861 posts 12138 karma points MVP 3x admin c-trib
    Jan 31, 2012 @ 12:45
    Jeroen Breuer
    0

    Could you please upgrade to 4.7.1.1 to see if that fixed it? It's a patch release so you can just update /bin, /umbraco and /umbraco_client

    Jeroen

  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 13:40
    Danny Winbourne
    0

    OK, I updated, but I am still getting an error.

    It now doesn't tell me what the error is. It just says "Error loading MacroEngine script (file: Carousel.cshtml)"

    That is annoying in it itself, as I can't now easily debug macro scripts! 

     

     

     

     

     

     

  • Jeroen Breuer 4861 posts 12138 karma points MVP 3x admin c-trib
    Jan 31, 2012 @ 13:57
    Jeroen Breuer
    0

    If you have debugging enabled you can add ?umbDebugShowTrace=true to the url of your page to show the trace which will show the error.

    Jeroen

  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 14:01
    Danny Winbourne
    0

    OK, I can confirm that it is the same error was before:

    I am not sure why it saying 'string' does not contain, as it should be dynamic XML at this point?

    Error Loading Razor Script (file: Carousel) 'string' does not contain a definition for 'url'    at CallSite.Target(Closure , CallSite , Object )
      at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
      at CallSite.Target(Closure , CallSite , Object )
      at ASP._Page_macroScripts_Carousel_cshtml.Execute() in g:\Sites\xxx-xx\xxxx-xxxx\macroScripts\Carousel.cshtml:line 22
      at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
      at System.Web.WebPages.WebPage.ExecutePageHierarchy()
      at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
      at umbraco.MacroEngines.RazorMacroEngine.ExecuteRazor(MacroModel macro, INode currentPage)
      at umbraco.MacroEngines.RazorMacroEngine.Execute(MacroModel macro, INode currentPage)

  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 15:30
    Danny Winbourne
    0

    I have found a work around that means I can continue, but I think there may be a bug somewhere here, as I can't see why the above methods shouldn't work.

    The following however works for me:

     

            DynamicNode xmlNode = new DynamicNode(int.Parse(@item.Attribute("link").Value.ToString()));
            dynamic urlXml = new DynamicXml("" + xmlNode.GetProperty("captionUrl").Value.Replace("-", "") + "");

     

    I then have to check to see if there are any decendents, and output the result

     

    @if (urlXml.Descendants().Count > 0)
    {
    @urlXml.Descendants()[0].url

     

    Note, I have to wrap the XML into root nodes, as the URL Picker doesn't have a root, and I also needed to replace properties that had "-" in them, as these were not accessible with the razer syntax

     

  • Jeroen Breuer 4861 posts 12138 karma points MVP 3x admin c-trib
    Jan 31, 2012 @ 15:39
    Jeroen Breuer
    0

    Hmm I see you are replacing the stripe (-). This is a bug which should have been fixed in Umbraco 4.7.1 http://umbraco.codeplex.com/workitem/30290

    Might also be related to this: http://umbraco.codeplex.com/workitem/30680

    Not sure if this info is helpful.

    Jeroen

  • Danny Winbourne 33 posts 54 karma points
    Jan 31, 2012 @ 15:52
    Danny Winbourne
    0

    Right, issue solved..

    I resaved the pages that were added to the releated link collection, and the error went away.

    I am only guessing that it hadn't saved correctly to the database?

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies