2

我有以下内容;

<asp:Repeater runat="server" ID="Repeater">
<ItemTemplate>
        <sc:image field="image from droplink" Item='<%# Container.DataItem %>' runat="server" />
</ItemTemplate>

“来自 droplink 的图像”是一个 droplink 选择值(Sitecore 内容项)。在这个项目中,有一个“图像”字段,它是我想要的实际媒体项目的来源。所以上面的方法不起作用,因为这个字段只返回内容项的 GUID。

如何从上述中继器中的 droplink 选定项的 Image 字段中获取图像 src?

4

2 回答 2

2

您需要使用包含 Image 字段的实际项目填充 sc:Image 标记上的Itemor属性。将是一个对象,而可以是一个 ID 或路径。我认为以下应该做到这一点。DatasourceItemItemDatasource

<sc:Image runat="server" Field="image field" Datasource="<%# ((Item)Container.DataItem)["droplink field"] %>" />
于 2013-01-28T23:21:56.223 回答
2

以下答案假定上下文项上的下拉链接指向媒体项。(在提问者澄清之前)。可能对其他人有用。

您需要在后面的代码中使用 asp:Image 和OnItemDataBound处理程序,并使用e.Item.DataItem(其中 e 是RepeaterItemEventArgs)来获取被绑定的项目。确保e.ItemType是一个ListItemType.Item. 从那里它会像......

var item = (Item)e.Item.DataItem;
var dropLink = new InternalLinkField(item.Fields["image from droplink"]);
var mediaItem = dropLink.TargetItem;
if (mediaItem != null)
{
  var options = new MediaOptions { Height = 100, Width = 100 }; //change to your dimensions
  var imageUrl = MediaManager.GetMediaUrl(new MediaItem(mediaItem), options);
  var imageControl = e.Item.FindControl("myImageControlID"); //change to asp:Image ID
  imageControl.ImageUrl = imageUrl;
  imageControl.AlternateText = mediaItem.Alt;
}

如果您支持页面编辑器(希望您支持!),在转发器中,您可以使用编辑框架来允许编辑每个项目上的图像。(请注意,链接的示例在整个 周围放置了一个编辑框ListView,而您需要将其放置在您的内部Repeater并将属性数据绑定Datasource到当前项目 ID。)

于 2013-01-28T23:05:16.910 回答