2012-03-15 3 views
3

Динамически разрешающие ссылки компонента во взглядах с использованием DD4T - не в расширенных текстовых полях с использованием ResolveRichText() - но если компонент A имеет поле ссылки компонента со ссылкой на компонент B и в вашем представлении, вы хотите отобразить URL-адрес компонент страницы B опубликован на ...DD4T и динамическое связывание

В этом решении нет помощника - это правильно?

Бит ржавый с ASP.NET MVC 3, поэтому пуристы смотрят в сторону, но следующие работы, мне просто нужно создать Html Helper.

@using DD4T.Providers.SDLTridion2011sp1; 

@{ 
    var linkFactory = new LinkFactory(); 
    linkFactory.LinkProvider = new TridionLinkProvider(); 
    var link = linkFactory.ResolveLink(Model.Component.Fields["related_link"].LinkedComponentValues[0].Id); 
} 

Просто, хотя это было немного странно, в этом проекте уже нет помощника.

Приветствия

ответ

6

Там действительно нет HTML помощник для решения ссылки. Основная причина, вероятно, в том, что (согласно принципам MVC) ссылка уже должна быть разрешена в модели, которую представляет ваш рендеринг.

Если вы закажете класс ContentModel из проекта dd4t.ContentModel, для компонента будет (закомментировано) свойство «ResolvedUrl». Это никогда не реализуется, но это более подходящее место для разрешения ссылки. Но ваш код выполняет эту работу, поэтому не стесняйтесь реализовать свой собственный HTML-помощник.

+0

Спасибо, Альберт. Почему свойство «никогда не реализовано»? – Neil

9

Я думаю, что вы правы, это должно быть в рамках. Но, к счастью, это очень легко добавить. Просто создать вспомогательный класс с помощью метода расширения, как это:

namespace MyApp.Helpers 
{ 
    public static class ModelHelper 
    { 
     public static string GetResolvedUrl(this IComponent component) 
     { 
      return GetResolvedUrl(component, null, null); 
     } 
    } 
} 

Теперь, если вы убедитесь, что ваш вид использует MyApp.Helpers пространства имен, вы можете сделать это в ваших компонентов просмотров:

@model DD4T.ContentModel.Component 
@using MyApp.Helpers 
<a href="@Model.GetResolvedUrl()">click here</a> 

Скорее всего, мы включим это в рамки в ближайшее время.

2

Приятная часть добавления собственного метода расширения заключается в том, что у вас есть возможность сделать что-то дополнительно там.

Мы используем его, чтобы различать компонент. Multimedia.Url и LinkFactory.ResolveLink (component.Id) в зависимости от погоды компонент является мультимедийным компонентом или обычным (поскольку мультимедийные компоненты, такие как файл PDF, обычно не являются размещен на странице, так что динамическое разрешение ссылок не вернет результат для вас.

Смежные вопросы