Sitefinity 中单个相关图像属性使用的对象类型
本文关键字:对象 类型 属性 单个相 图像 Sitefinity | 更新日期: 2023-09-27 18:34:02
我已经在新闻小部件中添加了一个名为RelatedImage的自定义字段,我想在自定义新闻列表MVC模板中显示该字段。
注意:自定义字段是相关媒体(图像、视频、文件(字段,设置了"可以上传或选择多个图像"的限制。
我可以通过循环访问自定义字段来检索图像的 URL,如下所示:
@foreach (var relatedItem in item.Fields.RelatedImage)
{
<li>@relatedItem.Fields.MediaUrl</li>
}
上面的代码工作并呈现 URL。
像这样的代码输出正确的值:
@item.Fields.RelatedImage.Length
但是,当您将限制设置为"只能上传或选择 1 张图像"时,用于@item.Fields.RelatedImage
的模型会发生变化,因此上述代码会引发异常,因为这些属性不存在。
我需要的是只渲染列表中的每个新闻项一张图像,但是当我切换到"只有 1 张图像......"时......"限制模式,我无法弄清楚模型是什么样子的,或者如何掌握它的属性。因此,以下代码将不起作用:
@item.RelatedItem("RelatedImage").Fields.MediaUrl
所以现在对我来说是一个令人沮丧的问题:我怎么知道什么模型传递给我的模板/视图?我已经尝试输出各种GetType().ToString()
选项,但我反复得到的只是 ItemViewModel,这没有帮助!
编辑 - 以下代码实际有效:
<img src="@Html.Raw(item.Fields.RelatedImage.Fields.MediaUrl)" />
但令人沮丧的是,这很难弄清楚。如何弄清楚类型相关图像是什么。属性字段是动态类型的,这使得事情变得更加棘手。
如果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" />
}
}
更好的方法可能是在构建视图模型时使用Telerik.Sitefinity.RelatedData.RelatedDataExtensions
中找到的GetRelatedItems
扩展,例如
viewModel.RelatedImages = newsItem.GetRelatedItems<Image>("RelatedImage")
这将返回 Image 对象的集合,而不考虑所选的图像数量。