2016-04-26 115 views
0

我正在使用Sitecore MVC網站和控制器,我試圖以編程方式填充Glass.Mapper.Sc.Fields.Image類的Src屬性。然而,這是煩人,只有一個公共的getter和一個內部setter聲明:如何以編程方式創建Glass.Mapper.Sc.Fields.Image類的實例?

public string Src { get; internal set; } 

還要注意的是,只有在這個類參數的構造函數。因此,必須有另一種方法來在內部設置這個值,但經過在線詳盡的搜索後,我找不到任何有用的東西。

請注意,在控制器中,我具有完全填充圖像對象所需的所有值,包括Sitecore項目ID。我也可以訪問包含Image對象數據的類型爲Sitecore.Data.Fields.ImageField的父級Sitecore項目。

我試過以下,但它返回一個空的Image實例。

SitecoreService sitecoreService = new SitecoreService(database); 
Image image = sitecoreService.GetItem<Image>(imageField.InnerField.ID.Guid); 

當我嘗試這樣做,它與它的尺寸和Alt領域設置正確,但不是Src屬性創建一個新的Image對象,出於某種原因。

Image img = sitecoreService.GetItem<Image>(imageField.MediaItem.ID.Guid); 
var parent = imageField.MediaItem.Parent; 

請讓我知道我可以編程方式設置此Image類的Src財產,或Sitecore的字段轉換成Image實例。


UPDATE >>>

我跟着@ DrazenJanjicek的諮詢和管理使用sitecoreService.GetItem方法,它成功地填充所有Image屬性爲我父項映射。

+0

我想調用sitecoreService.GetItem 的主要問題是,圖像不是包含字段定義的類模型。它是字段定義,但不是項目定義。您可以使用圖像項目模板字段創建自己的類圖像,並與其他項目一起使用它。 – Anton

回答

1

我認爲從您的Sitecore項目創建適當的玻璃類型更有意義,只需使用Image屬性。沒有簡單的API來創建只有圖像類型。你可以做到這一點,但最終Glass會首先創建外部類型。

+1

最初,我認爲你的回答不是很有幫助,因爲它實際上並沒有提供任何幫助,我可能會按照你的建議。然而,我相當資源豐富,所以找到了一種使用類似代碼創建父對象的方法,您是對的......它爲我成功創建了「Image」對象。謝謝。 – Sheridan

0

此代碼的工作對我來說:

var image = new Image() {MediaId = mediaItem.ID.ToGuid()}; 

您應該設置MediaId的圖像。

+0

感謝您的回覆,但我已經嘗試過了,我得到的只是一個只有'MediaId'屬性集的Image圖像實例。如何可能填充其他屬性?它沒有提及它們,因爲我們只是將「Guid」傳遞給實例。請記住我對Sitecore的經驗不足,請您進一步解釋一下。例如,我應該將哪些項目傳遞給'GetItem'方法?我一直在使用'ImageField.MediaItem'項目。 – Sheridan

+0

@Sheridan,抱歉,第一行很奇怪,我刪除它。 我發佈的代碼用於保存Image to Glass模型。 然後我做下一個:someitem.Image = image; MasterService。保存(someItem); 下一個項目,當我通過玻璃服務ge someItem我會得到一個正確填寫圖像字段。 – Anton