Sitefinity 中的单个相关图像 属性 使用什么对象类型?

What object type is used for a single related image property in Sitefinity?

我已将自定义字段添加到名为 RelatedImage 的新闻小部件中,我想将其显示在自定义新闻列表 MVC 模板中。

注意: 自定义字段是相关媒体(图像、视频、文件)字段,具有 "Multiple images can be uploaded or selected" 设置的限制。

我可以通过循环遍历自定义字段来检索图像的 URL,如下所示:

@foreach (var relatedItem in item.Fields.RelatedImage)
{
    <li>@relatedItem.Fields.MediaUrl</li>
}  

以上代码有效并呈现 URL。

这样的代码输出正确的值:

@item.Fields.RelatedImage.Length

但是,当您将限制设置为 "Only 1 image can be uploaded or selected" 时,用于 @item.Fields.RelatedImage 的模型会发生变化,因此上述代码会抛出异常,因为这些属性不存在。

虽然我需要的是只为列表中的每个新闻项目呈现一张图像,但是当我切换到 "Only 1 image..." 限制模式时,我无法弄清楚模型是什么样子或如何来掌握它的属性。所以下面的代码将不起作用:

@item.RelatedItem("RelatedImage").Fields.MediaUrl

所以现在对我来说是一个令人沮丧的问题:我怎么知道什么模型传递给我的 template/view?我试过输出各种 GetType().ToString() 选项,但我反复得到的只是 ItemViewModel,这没有帮助!

编辑 - 以下代码实际有效:

<img src="@Html.Raw(item.Fields.RelatedImage.Fields.MediaUrl)" />

但这令人沮丧地难以理解。如何弄清楚 Type RelatedImage 是什么。 属性 字段是动态类型,这让事情变得更加棘手。

如果 RelatedImage 字段设置为允许 1 张图像,则值 returned 的类型将为 Telerik.Sitefinity.Libraries.Model.Image

如果字段设置为允许多张图片,值 returned 将是相同类型的数组,即 Telerik.Sitefinity.Libraries.Model.Image[]

要回答您的问题,您可以检查 RelatedImage 属性 的类型:

@if (item.Fields.RelatedImage is Image)
{
    <img src="item.Fields.RelatedImage.Fields.MediaUrl" />
}
else if (item.Fields.RelatedImage is Image[])
{
    foreach (var relatedItem in item.Fields.RelatedImage)
    {
        <img src="relatedItem.Fields.MediaUrl" />
    } 
}

更好的方法可能是在构建视图模型时使用 Telerik.Sitefinity.RelatedData.RelatedDataExtensions 中的 GetRelatedItems 扩展,例如

viewModel.RelatedImages = newsItem.GetRelatedItems<Image>("RelatedImage")

这将 return Image 对象的集合,无论所选图像的数量如何。