2016-03-07 2 views
0

Дерево содержание следующим образом:Как связать элементы ссылку на Repeater в Sitecore

content 
-News Listing 
    -Article1 
    -Article2 
    -Article3 

Каждая из статей имеет шаблон данных - «Новости Статьи», которая, как:

News Article 
    Article --(Field section) 
    Related Articles --(Multilist - with datasource as '/content/News Listing') 

В каждой статье есть две другие статьи в качестве «Статьи по теме». Например, статья 1 содержит статьи 2 & 3 и т. Д.

Markup:

<h3>Related articles</h3> 
<asp:Repeater ID="rpArticles" runat="server" ItemType="Sitecore.Data.Items.Item"> 
<HeaderTemplate> 
    <ul class="relatedArticles"> 
</HeaderTemplate> 
<ItemTemplate> 
    <li> 
     <sc:Link Field="<%#Item.Paths.FullPath %>" runat="server" Item="<%#Container.DataItem %>"> 
      <sc:Text Field="Heading" runat="server"/> 
     </sc:Link>   
    </li>         
</ItemTemplate> 
<FooterTemplate> 
    </ul> 
</FooterTemplate> 
</asp:Repeater> 

Код:

private void Page_Load(object sender, EventArgs e) 
{ 
    MultilistField relatedArticles = Sitecore.Context.Item.Fields["Related Articles"]; 
    rpArticles.DataSource = relatedArticles.TargetIDs.Select(id => Sitecore.Context.Database.GetItem(id)); 
    rpArticles.DataBind(); 
} 

выше разметки представляет собой раствор из Here
'Заголовок' имя поля (например: Article1, Статья2 и т. Д.)

Когда я просматриваю «статью новостей 1», соответствующие статьи должны быть 2 & 3, но результат неправильный & также нет якорных меток. Просто текст.

Что не так в моем коде.

выход:

Статьи по теме
Article1
Article1

+1

вы видели https://www.google.com/search?q="sc:link"+repeater –

+1

Возможный дубликат [Datasource в Repeater в Sitecore] (HTTP: // StackOverflow. com/questions/11215904/datasource-in-repeatater-in-sitecore) –

ответ

2

Не знаю, почему вы изменили свой первоначальный вопрос, так как это было почти правильно. Поскольку элемент, с которым вы связываетесь, не указан в поле «Общая ссылка», вы не можете использовать элемент управления sc:Link, вместо этого гораздо проще использовать ASP.Net Hyperlink control, который связан с кодом в событии Item_Bound или просто добавляет URL-адрес элемента к якорю ссылка:

<ItemTemplate> 
    <li> 
     <a href="<%# Sitecore.Links.LinkManager.GetItemUrl((Sitecore.Data.Items.Item) Container.DataItem) %>"> 
      <sc:Text Field="Heading" runat="server" Item="<%#Container.DataItem %>"/> 
     </a> 
    </li>         
</ItemTemplate> 
1

Мой первоначальный ответ был не прав, как указано в комментариях. Snap ответ, не думая полностью, извините! Исправление:

Вы заполняете текстовое поле Sitecore полем заголовка текущего контекстного элемента. Вместо этого вам необходимо установить Field с Container.DataItem.

Так попробуйте заменить ...

<sc:Text Field="Heading" runat="server"/> 

... с ...

<sc:Text Field="Heading" runat="server" Item="<%# Container.DataItem %>"/> 
+0

Атрибут поля ожидает, что на «Имя поля» будет отображаться, вы установите его для текстового значения, хранящегося в этом поле. Это неверно. – jammykam

+0

Свойство поля - это строка, а не объект Field. Это не будет работать. Вам необходимо установить свойство Item в 'Container.DataItem', как указано в ссылке Jan, опубликованной выше. –

+1

@Qwerty Вам необходимо установить Container.DataItem в текстовое поле sc:. Я исправил свой ответ, чтобы отразить это. – getsetcode

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