c# - Sitecore 使用嵌套转发器正确显示父项和子项

标签 c# asp.net sitecore

在 sitecore 中我有以下结构:

  • Europe
    • Germany
    • France
    • Sweden
  • Asia
    • China
    • Thailand
  • Middle East
    • U.A.E
    • Iran

我正在使用嵌套转发器在 Asp.net 中显示此结构

<asp:Repeater runat="server" ID="repSubsidiaryList">
<ItemTemplate>
<li>
 <%# Helper.Field(Container.DataItem as Item, "Short Title)%> 
   <asp:Repeater ID="InnerRepeater" runat="server">
     <ItemTemplate>
       <li>
        <%# Helper.Field(Container.DataItem as Item, "Name")%>
       </li>
      </ItemTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>

这是背后的代码:

List<Item> _countryNameItems = new List<Item>(); 
protected void Page_Load(object sender, EventArgs e)
{
    //get the item Subsidaries in sitecore 
    Item mainSubsidiaryFolderItem = Sitecore.Context.Database.GetItem(Settings.GetSetting("SubsidariesFolder"));

    _countryNameItems = mainSubsidiaryFolderItem.Axes.GetDescendants().Where(p => p.TemplateName == "Subsidiary").ToList();

    // binding Subsidiary Folder to a repeater
    repSubsidiaryList.DataSource = mainSubsidiaryFolderItem.GetChildren();
    repSubsidiaryList.DataBind();
}

private void repSubsidiaryList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    RepeaterItem item = e.Item;
    InnerRepeater = (Repeater) item.FindControl("InnerRepeater");
    InnerRepeater.DataSource = _countryNameItems;
    InnerRepeater.DataBind();
}

我得到的结果是这样的:

  • Europe
    • Germany
    • France
    • Sweden
    • China
    • Thailand
    • U.A.E
    • Iran
  • Asia
    • Germany
    • France
    • Sweden
    • China
    • Thailand
    • U.A.E
    • Iran
  • Middle East
    • Germany
    • France
    • Sweden
    • China
    • Thailand
    • U.A.E
    • Iran

我不知道如何获取currentItem然后绑定(bind)数据。

最佳答案

您的内部转发器始终将数据源发送至_countryNameItems。用此替换 ItemDataBound 方法应该会有所帮助:

private void repSubsidiaryList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
   // Cast the current dataitem to a Sitecore item
   Item item = (Item)e.Item.DataItem; 
   Repeater innerRpt = (Repeater) e.Item.FindControl("InnerRepeater");      
   // bind the inner repeater to the children of the sitecore item
   innerRpt.DataSource = item.Children; 
   innerRpt.DataBind();
}

关于c# - Sitecore 使用嵌套转发器正确显示父项和子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30054828/

相关文章:

c# - 设置 OpenFileDialog/SaveFileDialog 的开始位置

c# - 关于使用哪种语言进行浏览器自动化和抓取的建议

c# - 调用具有反射和配置依赖项的 DLL

Sitecore - 从发布弹出窗口中隐藏 "Publish Subitems"

c# - 如何以编程方式在 Sitecore 中创建用户配置文件

Sitecore UserSwitcher 与 SecurityDisabler

c# - 从 ObjectResult 获取值

c# - 使用 PhysicalFile 时如何正确捕获 FileNotFoundException

c# - 添加自己的 javascript 进行验证

asp.net - 在 aspnet mvc 成员资格中获取当前登录的用户 ID