如何将链接项绑定到Sitecore中的Repeater

时间:2016-03-07 11:26:12

标签: asp.net sitecore sitecore8

内容树如下:

content
 -News Listing
  -Article1
  -Article2
  -Article3

每篇文章都是数据模板 - "新闻文章"这是:

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

每篇文章都有其他2篇文章作为其相关文章'。例如:第1条有相关的第2条和第3条,依此类推。

标记:

<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的解决方案 &#39;标题&#39;是该字段的名称(例如:Article1,Article2等。)

当我浏览新闻第1条&#39;时,相关文章应为2&amp; 3,但输出不正确&amp;也没有锚标签。只是纯文本。

我的代码有什么问题。

输出:

  

相关文章
  第一条
  第一条

2 个答案:

答案 0 :(得分:2)

不确定为什么你改变了原来的问题,因为它几乎是正确的。由于您链接到的项目未在“常规链接”字段中指定,因此您无法使用sc:Link控件,而是使用ASP.Net Hyperlink control更简单,{{3}}从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 :(得分:1)

我的原始答案是错误的,如评论中指出的那样。不假思索地快速响应,对不起!校正:

您正在使用当前上下文项的标题字段填充Sitecore文本字段。相反,您的sc:Text控件需要从Field设置其Container.DataItem属性。

所以尝试替换......

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

...与...

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