2016-04-26 79 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