2014-10-31 59 views
5

创建我通过Glass.Mapper创建Sitecore的项目像这样的项目:如何申请标准值与Glass.Mapper

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

// Create the car item 
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4}); 

这个工作,除了在汽车模板的标准值不适用 - 或者如果他们正在被新的汽车属性立即覆盖。因此,如果Car对象的Color属性的值为null,则将该空值写入该字段,而不是从Car模板上的标准值中的“绿色”值。

我已经寻找了一个明智的方式来通过Glass.Mapper完成此操作,但没有发现任何东西。 有没有办法通过Glass.Mapper来做到这一点?

回答

5

有办法做到这一点,使用Create方法看起来像这样的控制装置:

T Create<T, TK>(TK parent, string newName, Language language = null, bool updateStatistics = true, bool silent = false) where T : class where TK : class; 

所以您的代码会是这个样子:

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

var carName = "Some New Name"; 

// Create the car item 
// I don't know what the type of BooksFolder is so you would put that in the place of Folder. 
ICar car = sitecoreService.Create<Car, Folder>(homeItem.BooksFolder, carName); 
car.Tires = 4; 
car.Seats = 4; 

sitecoreService.Save(car); 

我们运行到同一个问题,这是我们如何解决它。

+0

完美的作品!我猜这是有道理的,当你从一个对象创建一个新的项目时,你完全可以*得到*没有默认值的对象,但是当你从一个名称创建它时,你会得到一个应用了标准值的项目。 – 2015-02-16 10:24:41

+2

@ T.J.Kjaer我不得不不同意这个“有意义” - 什么*会有意义的是有一个正确的名称创建方法,指示是否应用标准值或不:) – 2016-02-05 10:28:31

1

通过调用包含在EditContext中的Sitecore的Reset()方法,您可以重置要返回其标准值的字段。

var homeItem = sitecoreContext.GetHomeItem<HomeItem>(); 

// Create the car item 
ICar car = sitecoreService.Create(homeItem.BooksFolder, new Car { Tires = 4, Seats=4}); 

using(new EditContext()) 
{ 
    car.Fields["Color"].Reset(); 
} 

http://firebreaksice.com/how-to-reset-individual-sitecore-fields-to-standard-values/