从sitecore中的树列表加载多个图像



我刚开始使用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项目设置"项目"字段。

        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:Image标记的字段更改为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);
                }
            }
        }

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

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

相关内容

  • 没有找到相关文章

最新更新