2016-02-09 46 views
3

我已將一個自定義字段添加到了名爲的相關圖像,我想在自定義新聞列表MVC模板中顯示該自定義字段。什麼對象類型用於Sitefinity中的單個相關圖像屬性?

注意:自定義字段是一個與「可以上傳或選擇多個圖像」限制相關的媒體(圖像,視頻,文件)字段。

我可以通過自定義字段循環如下檢索圖像的URL:

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

上面的代碼工作和顯示的URL。

這樣的代碼輸出正確的值:當設置的限制,以使上述代碼拋出異常,因爲「只有1圖像可以上傳或選擇了」用於@item.Fields.RelatedImage變化模型

@item.Fields.RelatedImage.Length 

然而,這些屬性不存在。

我需要的是在列表中只顯示每個新聞項目的一個圖像,但是當我切換到「Only 1 image ...」限制模式時,我無法弄清楚模型的外觀或如何獲得其財產。所以,下面的代碼將無法正常工作:

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

所以現在對我來說,問題是一個令人沮喪的:我怎麼知道被傳遞到我的模板/圖什麼型號?我試過輸出各種GetType().ToString()選項,但我反覆得到的是ItemViewModel,它並沒有幫助!

編輯 - 下面的代碼實際工作:

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

但是,這是令人沮喪很難弄清楚。如何找出Type RelatedImage是什麼。 Fields屬性是動態類型,這使得事情更加棘手。

回答

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

更好的方法可能是在構建視圖模型時使用Telerik.Sitefinity.RelatedData.RelatedDataExtensions中的GetRelatedItems擴展名,例如

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

無論選擇多少個圖像,它將返回一個Image對象的集合。

+1

謝謝@OllieP。問題,你從哪裏得到這種明確的信息?我查看了Telerik的文檔,發現了這種情況。 – Jacques

+0

不幸的是,文檔令人失望地缺乏。您可以使用Sitefinity論壇,通常會在幾天內得到答覆。如果你不知道任何具有現有知識的人,那麼一些實驗和dotPeek的副本可以讓dlls有更多的好處。 –

相關問題