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

时间:2016-02-09 14:42:45

标签: c# sitefinity sitefinity-feather sitefinity-mvc

我在新闻窗​​口小部件中添加了一个名为 RelatedImage 的自定义字段,我想在自定义新闻列表MVC模板中显示该字段。

注意:自定义字段是相关媒体(图像,视频,文件)字段,其限制为“可以上载或选择多个图像”设置。

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

@item.Fields.RelatedImage.Length

以上代码适用并呈现URL。

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

@item.Fields.RelatedImage

但是,当您将限制设置为“只能上载或选择1个图像”时,用于@item.RelatedItem("RelatedImage").Fields.MediaUrl 的模型会发生变化,因此上述代码会抛出异常,因为这些属性不存在。

我需要的是在列表中每个新闻项只渲染一个图像,但当我切换到“仅1图像...”限制模式时,我无法弄清楚模型的外观或如何掌握其属性。所以下面的代码不起作用:

GetType().ToString()

所以现在我的问题是令人沮丧的:我如何知道传递给我的模板/视图的模型?我已经尝试输出各种<img src="@Html.Raw(item.Fields.RelatedImage.Fields.MediaUrl)" /> 选项,但我反复得到的是ItemViewModel,它没有帮助!

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

test()

但这令人沮丧地难以弄明白。如何找出Type RelatedImage是什么。属性Fields属于dynamic类型,这使得事情变得更加棘手。

1 个答案:

答案 0 :(得分:2)

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

如果该字段设置为允许多个图像,则返回的值将是相同类型的数组,即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" />
    } 
}

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

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

,无论选择的图像数量如何,都会返回一组Image对象。