我有以下内容;
<asp:Repeater runat="server" ID="Repeater">
<ItemTemplate>
<sc:image field="image from droplink" Item='<%# Container.DataItem %>' runat="server" />
</ItemTemplate>
“来自droplink的图片”是一个droplink选择值(Sitecore内容项)。在这个项目中,有一个字段“Image”,它是我想要的源的实际媒体项目。所以上面的方法不起作用,因为这个字段只返回内容项的GUID。
如何从上述转发器中droplink selected item的Image字段中获取图像src?
答案 0 :(得分:2)
以下答案假设Context Item上的droplink指向Media Item。 (在提问者澄清之前)。可能对其他人有用。
您需要在代码后面使用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;
}
如果您支持页面编辑器(我希望您是!),在转发器中您可以使用Edit Frames来编辑每个项目上的图像。 (请注意,链接的示例会在整个ListView
周围放置一个编辑框,而您需要将其放在Repeater
中,并将Datasource
属性数据绑定到当前项ID。)
答案 1 :(得分:2)
您需要使用包含图像字段的实际项目填充sc:Image标记上的Item
或Datasource
属性。 Item
将是Item
个对象,而Datasource
可以是ID或路径。我认为以下应该这样做。
<sc:Image runat="server" Field="image field" Datasource="<%# ((Item)Container.DataItem)["droplink field"] %>" />