Sitecore:获取中继器中droplink的值

Sitecore:获取中继器中droplink的值,sitecore,Sitecore,我有以下几点: <asp:Repeater runat="server" ID="Repeater"> <ItemTemplate> <sc:image field="image from droplink" Item='<%# Container.DataItem %>' runat="server" /> </ItemTemplate> “来自droplink的图像”是droplink选择的值(Sitecor

我有以下几点:

<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所选项目的图像字段中获取图像src?

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

您需要在代码隐藏中使用asp:Image和处理程序,并使用
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;
}

如果您支持页面编辑器(我希望您是!),那么在转发器中,您可以使用它来编辑每个项目上的图像。(请注意,链接的示例在整个
列表视图周围放置了一个编辑框,而您需要将其放置在
中继器中,并将
数据源
属性数据绑定到当前项ID。)

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

您需要在代码隐藏中使用asp:Image和处理程序,并使用
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;
}

如果您支持页面编辑器(我希望您是!),那么在转发器中,您可以使用它来编辑每个项目上的图像。(请注意,链接的示例在整个
列表视图
周围放置了一个编辑框,而您希望将其放置在
中继器
中,并将
数据源
属性数据绑定到当前项目ID。)

您需要使用包含图像字段的实际项填充sc:Image标记上的
数据源
属性<代码>项
将是
对象,而
数据源
可以是ID或路径。我认为以下几点可以做到

<sc:Image runat="server" Field="image field" Datasource="<%# ((Item)Container.DataItem)["droplink field"] %>" />

您需要使用包含图像字段的实际项填充sc:Image标记上的
数据源
属性<代码>项
将是
对象,而
数据源
可以是ID或路径。我认为以下几点可以做到

<sc:Image runat="server" Field="image field" Datasource="<%# ((Item)Container.DataItem)["droplink field"] %>" />


您的droplink指向什么?媒体资产?抱歉-它指向一个内容项,而内容项又有一个字段“image”指向一个媒体项。您的droplink指向什么?媒体资产?抱歉-它指向一个内容项,而内容项又有一个字段“image”指向一个媒体项。它实际上是droplink指向的一个sitecore内容项。在这个字段中,有一个字段“Image”,它是我想要的实际媒体项的来源。根据这个澄清添加了一个新的答案。它实际上是droplink指向的一个sitecore内容项。在此字段中,有一个字段“Image”,它是我想要的源的实际媒体项。根据此说明添加了一个新的答案。我得到了一个“找不到类型或命名空间名称‘Container’…”,行为“”工作正常但是?“数据源=””-工作:)哇!动态编码。已编辑答案并已修复。我得到一个“找不到类型或命名空间名称‘Container’。”,行为“”工作正常但是?“数据源=””-工作:)哇!动态编码。编辑答案并修复。