Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitefinity中单个相关图像属性使用的对象类型是什么?_C#_Sitefinity_Sitefinity Feather_Sitefinity Mvc - Fatal编程技术网

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

C# Sitefinity中单个相关图像属性使用的对象类型是什么?,c#,sitefinity,sitefinity-feather,sitefinity-mvc,C#,Sitefinity,Sitefinity Feather,Sitefinity Mvc,我已经向名为RelatedImage的新闻小部件添加了一个自定义字段,我希望在自定义新闻列表MVC模板中显示该字段 注意:自定义字段是一个相关媒体(图像、视频、文件)字段,设置了“可上传或选择多个图像”的限制 我可以通过循环自定义字段来检索图像的URL,如下所示: @foreach (var relatedItem in item.Fields.RelatedImage) { <li>@relatedItem.Fields.MediaUrl</li> } 但

我已经向名为RelatedImage的新闻小部件添加了一个自定义字段,我希望在自定义新闻列表MVC模板中显示该字段

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

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

@foreach (var relatedItem in item.Fields.RelatedImage)
{
    <li>@relatedItem.Fields.MediaUrl</li>
}  
但是,当您将限制设置为“只能上载或选择1个图像”时,用于
@item.Fields.RelatedImage的模型将发生更改,因此上述代码引发异常,因为这些属性不存在

不过,我需要的是在列表中每个新闻项只渲染一个图像,但是当我切换到“仅1个图像…”限制模式时,我无法确定模型的外观,或者如何获得其属性。因此,以下代码将不起作用:

@item.RelatedItem("RelatedImage").Fields.MediaUrl
因此,我现在面临的问题是一个令人沮丧的问题:我如何知道传递给模板/视图的是什么模型?我试过输出各种
GetType().ToString()
选项,但我反复得到的都是ItemViewModel,这没有帮助

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

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


但令人沮丧的是,这很难弄清楚。如何确定RelatedImage是什么类型。属性字段是dynamic类型,这使得事情变得更加棘手

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

它将返回图像对象的集合,而不考虑所选图像的数量。

谢谢@OllieP。问题,你从哪里得到这种清晰的信息?我查阅了Telerik的文档,没有发现类似的内容。不幸的是,文档的缺失令人失望。您可以使用Sitefinity论坛,通常会在几天内收到回复。如果你不认识任何有相关知识的人,那么做一点实验和一份dotPeek拷贝来对DLL进行一番八卦是另一种选择。
@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" />
    } 
}
viewModel.RelatedImages = newsItem.GetRelatedItems<Image>("RelatedImage")