从sitecore中的treelist加载多个图像

时间:2013-11-20 10:58:21

标签: c# sitecore treelist

我开始使用Sitecore并且很难将图像存储在TreeList中以便在aspnet转发器中正确显示。

在标记中,我有一个转发器,用于使用sc:Image项列出图像。

                <asp:Repeater ID="rptLogos" runat="server" OnItemDataBound="rptLogos_ItemDataBound" >
                    <ItemTemplate>
                        <a title="Logo" href="#">
                            <sc:Image runat="server" ID="img" field="image logos" />
                        </a>
                    </ItemTemplate>
                </asp:Repeater>

在后面的代码中,我正在检索MultilistField并使用TargetID设置转发器的数据源,如此

        Sitecore.Data.Fields.MultilistField mlLogos = Footer.Fields["Logos"];

        if (mlPartnerLogos != null)
        {
            rptLogos.DataSource = mlLogos.TargetIDs;
            rptLogos.DataBind();
        }

在ItemDataBound事件中,我将每个ID转换为一个项目,从转发器中获取图像控件,并为Sitecore.Web.UI.WebControls.Image项目设置Item字段。

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            ID targetId = e.Item.DataItem as ID;

            if (!targetId.IsNull)
            {
                MediaItem targetItem = Sitecore.Context.Database.GetItem(targetId);

                if (targetItem != null)
                {
                    var phImage = e.Item.FindControl("img") as Sitecore.Web.UI.WebControls.Image;
                    phImage.Item = targetItem;
                }
            }
        }

如果我调试代码,它似乎没有任何问题检索数据。但是,在标记中,我只是得到了空白文本,而不是将其翻译成字段。

获取Sitecore项目并将其分配给Sitecore.Web.UI.WebControls.Image项目的相同“想法”在其他地方工作正常我有一个项目,虽然我注意到如果我更改sc:图像标记的字段除了sitecore中字段名称的小写名称之外的任何内容都不起作用。如果这是问题,我对TreeList中的图像应该是什么应该是有点困惑。

我也有一种奇怪的感觉,我正在检索项目并试图分配它们的方式可能有点过于“臃肿”,并且可能有一种更简单的方法。

非常感谢任何帮助。谢谢。

编辑:

通过将asp:image替换为sc:image并将ItemDataBound更改为

来修复
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            ID targetId = e.Item.DataItem as ID;

            if (!targetId.IsNull)
            {
                MediaItem targetItem = Sitecore.Context.Database.GetItem(targetId);

                if (targetItem != null)
                {
                    var phImage = e.Item.FindControl("img") as System.Web.UI.WebControls.Image;
                    phImage.ImageUrl = Sitecore.Resources.Media.MediaManager.GetMediaUrl(targetItem);
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

sc:image控件用于显示项目的字段。我认为这是一种更好的方法,只需使用asp:图像控件并填充图像网址。如果您使用MediaManager,则可以从图像项中获取图像URL。

答案 1 :(得分:1)

Martijn是对的。我想补充说,跳过OnItemDataBound更好。您应该更容易使用数据绑定。用项目替换mlLogos.TargetIDs,你就可以了!