November Happy Hour will be moved to Thursday December 5th.
AI OnAI Off
November Happy Hour will be moved to Thursday December 5th.
If you don't need the PropertyUrl requirement, you can use a ContentReference instead and use an extension to get the simple url.
using EPiServer; using EPiServer.Core; using EPiServer.DataAnnotations; using EPiServer.ServiceLocation; using EPiServer.Web.Routing; namespace ExampleExtensions { public static class ExampleContentExtensions { static Injected<IContentLoader> _ContentLoader; public static string GetUrl(this ContentReference contentReference) { if (ContentReference.IsNullOrEmpty(contentReference)) return "#"; var content = _ContentLoader.Service.Get<IContent>(contentReference); var externalProperty = content?.Property["PageExternalURL"]; if (!string.IsNullOrWhiteSpace(externalProperty?.ToString())) { return string.Format("/{0}/", externalProperty.ToString().Trim('/')); } return UrlResolver.Current.GetUrl(contentReference); } } public class PageBase : PageData { [CultureSpecific] [AllowedTypes(typeof(PageData))] public virtual ContentReference LinkToContent { get; set; } } }
Thanks Brad,
I was looking for this kind of solution, but it was not working with PropertyUrl...
As I can see here they are using not only the Page references, but links to the catalogs (from EpiCommerce)... and I am not sure if they could reference here on other features of PropertyUrl... So I am looking the solution for PropertyUrl at the moment
I've not tested, but this may work for you. It should support Url, ContentReference, and IContent.
using EPiServer; using EPiServer.Core; using EPiServer.ServiceLocation; using EPiServer.Web.Routing; namespace ExampleExtensions { public static class ExampleContentExtensions { public static string GetUrl(this Url url) { var content = UrlResolver.Current.Route(new UrlBuilder(url)); return GetUrl(content); } public static string GetUrl(this ContentReference contentReference) { if (ContentReference.IsNullOrEmpty(contentReference)) return "#"; var content = ServiceLocator.Current.GetInstance<IContentLoader>().Get<IContent>(contentReference); return GetUrl(content); } public static string GetUrl(this IContent content) { if (content == null) return "#"; var externalProperty = content?.Property["PageExternalURL"]; if (!string.IsNullOrWhiteSpace(externalProperty?.ToString())) { return string.Format("/{0}/", externalProperty.ToString().Trim('/')); } return UrlResolver.Current.GetUrl(content.ContentLink); } } }
Thank you a lot, Brad!
I'll try this solution.
Upd: It works fine. Thanks!
Hi,
I am looking for some elegant solution for it if it exists. Thanks in advance