gpt4 book ai didi

c# - 什么对象类型用于 Sitefinity 中的单个相关图像属性?

转载 作者:行者123 更新时间:2023-11-30 16:04:15 24 4
gpt4 key购买 nike

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

注意:自定义字段是相关媒体(图片、视频、文件)字段,设置了“可以上传或选择多张图片”的限制。

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

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

上面的代码可以工作并呈现 URL。

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

@item.Fields.RelatedImage.Length

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

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

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

所以现在对我来说是一个令人沮丧的问题:我如何知道什么模型被传递到我的模板/ View ?我试过输出各种 GetType().ToString() 选项,但我反复得到的只是 ItemViewModel,这无济于事!

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

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

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

最佳答案

如果 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" />
}
}

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

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

这将返回 Image 对象的集合,而不管所选图像的数量。

关于c# - 什么对象类型用于 Sitefinity 中的单个相关图像属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com