2013-11-20 2 views
0

Я начинаю работу с Sitecore, и мне трудно получить изображения, хранящиеся в TreeList, для правильного отображения в ретрансляторе aspnet.Загрузка нескольких изображений из твинера в sitecore

В разметке у меня есть ретранслятор, предназначенный для отображения изображений с помощью элемента 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 и настройка источника данных ретранслятора с TargetIDs как так

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

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

В случае ItemDataBound я тогда превращающий каждый идентификатор элемента, захват управления изображением из ретранслятора и установка поля Item для элемента 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 : Поле тега изображения ничем, кроме имени в нижнем регистре имени поля в sitecore, не будет работать. Если это проблема, я немного смущен тем, что, однако, должно быть имя поля для изображений в TreeList.

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

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

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

Фиксированный как это было предложено заменить подкожно: изображение с осины: изображения и изменения 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); 
       } 
      } 
     } 

ответ

1

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

1

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

Смежные вопросы