2017-01-24 5 views
0
  1. У меня есть определенная страница, имеющая как длинный (Page1/PAGE2/MYPAGE) и простых (MYPAGE) адрес.
  2. Тогда я хочу, чтобы ссылаться на него в определенном месте с помощью PropertyUrl:SimpleAddress из PropertyUrl

    [CultureSpecific] 
    [Required] 
    [BackingType(typeof(PropertyUrl))] 
    [Display(
        Name = "Link", 
        Description = "Link to the page", 
        GroupName = SystemTabNames.Content, 
        Order = 1)] 
    public virtual Url Link { get; set; } 
    
  3. Я хочу простой адрес (если он существует), которые будут использоваться для маршрутизации или URL рендеринга, но не длинный ,

Я ищу какое-то элегантное решение для него, если он существует

ответ

1

получил answer from Brad McDavid

Modified это немного, чтобы соответствовать лучше моей задаче:

public static string GetExternalUrl(this Url url) 
{ 
    var content = UrlResolver.Service.Route(new UrlBuilder(url)); 

    return GetExternalUrl(content); 
} 

public static string GetExternalUrl(this ContentReference contentReference) 
{ 
    if (ContentReference.IsNullOrEmpty(contentReference)) return null; 

    var content = ServiceLocator.Current.GetInstance<IContentLoader>().Get<IContent>(contentReference); 

    return GetExternalUrl(content); 
} 

public static string GetExternalUrl(this IContent content) 
{ 
    var externalProperty = content?.Property["PageExternalURL"]; 

    return !string.IsNullOrWhiteSpace(externalProperty?.ToString()) ? $"/{externalProperty.ToString().Trim('/')}/" : null; 
}