2014-10-31 55 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/