16 Dec 2016
Getting related links from an umbraco page can be quite tricky, especially if you want to get them in the controller.
This post gives you a handy little helper method to turn your related links property into a C# class object to make it easier to work with.
using System.Collections.Generic; using Umbraco.Core.Models; using Newtonsoft.Json.Linq; using Umbraco.Web;
namespace CodeShare.Library.RelatedLinks { public class RelatedLink { public string Text { get; set; } public string Url { get; set; } public bool NewWindow { get; set; } public string Target { get { return NewWindow ? "_blank" : null; } }
public RelatedLink(string text, string url, bool newWindow) { Text = text; Url = url; NewWindow = newWindow; } }
public static class Helper { public static List<RelatedLink> GetRelatedLinks(IPublishedContent contentItem, string propertyAlias) { List<RelatedLink> relatedLinksList = null; UmbracoHelper uHelper = new UmbracoHelper(UmbracoContext.Current); IPublishedProperty relatedLinkProperty = contentItem.GetProperty(propertyAlias);
if (relatedLinkProperty != null && relatedLinkProperty.HasValue && relatedLinkProperty.Value.ToString().Length > 2) { relatedLinksList = new List<RelatedLink>(); JArray relatedLinks = (JArray)relatedLinkProperty.Value;
foreach (JObject linkItem in relatedLinks) { string linkUrl = (linkItem.Value<bool>("isInternal")) ? uHelper.NiceUrl(linkItem.Value<int>("internal")) : linkItem.Value<string>("link"); bool newWindow = linkItem.Value<bool>("newWindow"); string linkText = linkItem.Value<string>("caption"); relatedLinksList.Add(new RelatedLink(linkText, linkUrl, newWindow)); } }
return relatedLinksList; } } }
Here is how you can use it in your code.
using CodeShare.Library.RelatedLinks; List<RelatedLink> relatedLinks = Helper.GetRelatedLinks(CurrentPage, "yourRelatedLinksPropertyAlias");
You will then have a link of RelatedLink objects giving you access to the properties on it such as Text, Url, NewWindow and Target.
If you find it useful, please bookmark and share this post.