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 对象的集合,无论所选图像的数量如何。
我已将自定义字段添加到名为 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 对象的集合,无论所选图像的数量如何。