Загрузка нескольких изображений из древовидного списка в 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 я преобразовываю каждый идентификатор в элемент, извлекаю элемент управления изображением из повторителя и устанавливаю поле "Элемент" для элемента 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.

У меня также есть странное ощущение, что способ, которым я получаю элементы и пытаюсь назначить их, может быть слишком "раздутым", и может быть более простой способ сделать это.

Любая помощь будет принята с благодарностью. Спасибо.

Редактировать:

Исправлено, как предложено, заменив sc: изображение asp: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 ответа

Решение

Элемент управления sc:image должен использоваться для отображения полей элемента. Я думаю, что лучше всего использовать элемент управления asp:image и заполнить URL-адрес изображения. Если вы используете MediaManager, вы можете получить URL-адрес изображения из вашего элемента изображения.

Мартейн прав. Я хотел бы добавить, что пропуск OnItemDataBound лучше. Вы должны использовать привязку данных, гораздо проще. Замените mlLogos.TargetID на элементы, и все готово!

Другие вопросы по тегам