2014-04-24 131 views
5

我正在使用Sitecore Glass Mapper創建一個新項目。 我們正在使用Sitecore 7.2,Sitecore(TDS)代碼生成和最新版本的玻璃的團隊開發的最新版本。Sitecore Glass Mapper始終爲空

的代碼我試圖執行:

var b = new SitecoreContext(); 
var c = b.GetCurrentItem<T01_Homepage>(); 

b不是空。 c爲空。

var d = b.GetItem<T01_Homepage>("path") 

d爲空。

我說我的組件GlassMapperScCustom:

public static IConfigurationLoader[] GlassLoaders(){    

    var attributes = new AttributeConfigurationLoader(new[] { "Company.Framework.Websites.Corporate", "Company.Framework.Core", "Company.Framework.Common" }); 

    return new IConfigurationLoader[] { attributes }; 
} 

當我看着我的b.GlassContext.TypeConfigurations所有車型都在那裏。

我想它可能是一個語言問題,因爲該網站是荷蘭語,也許錯誤的語言將被錯誤地解決。這也不是這種情況。

我禁用了WebActivator,並在我的Global.asax Application_Start方法中添加了GlassMapperSc.Start()。

我們也使用Autofac作爲DI框架。但沒有它,它仍然不能正常工作,正如你上面看到的。另外,當我創建自己的自定義模型而沒有生成TDS代碼時,GetCurrentItem<T>的結果爲空。

有沒有人有一個想法,我可以解決這個問題?

回答

2

你檢查了你的Sites.config和這個網站的默認語言嗎?在您的Sitecore語言文件夾中定義的語言與您的配置之間可能存在差異。

我有一個類似的問題,其中一個項目中我將Sitecore.Context.Language改爲「nl」而不是「nl-NL」。玻璃映射器將返回null,但在這種情況下,Sitecore.Context.Database.GetItem將返回一個對象。

+0

這個技巧。我的語言是nl-nl,在sites.config中,sites/site節點在nl上有屬性語言。謝謝。 – ydd1987

+0

這很有趣 - 我遇到了類似的問題,當我檢查我的網站的根目錄時,語言似乎被設置爲「hr」 - 這是我從未明確設置的值,但它是第一級的名稱我的網站的孩子,因爲我已經刪除: http://screencast.com/t/aMhy7yl3 難道這有不知何故使Sitecore/Glass.Mapper認爲「小時」(克羅地亞)應該是語言,從而返回一個空項目? –

1

大部分時間都是語言問題。當你沒有當前或給定語言的版本時,映射器返回一個空對象。

令人困惑的是Sitecore.Context.Database.GetItem返回一個對象,即使它沒有使用當前語言的版本。一定要檢查該item.Versions有任何。

+0

謝謝,這種反應與Aldentev的反應相結合,爲我做了訣竅。 – ydd1987

0

有些事情,你可以嘗試(這並沒有在意見欄中適合)

1)確認在Sitecore的項目對象中的相關領域包含你的「C」 VAR和Sitecore.Context.Database.GetItem("path")的值(這樣Sitecore.Context.Item你的 「d」 VAR)

2)儘量封裝的GetItem/GetCurrentItem中的呼叫VersionCountDisabler,像這樣:

T01_Homepage model = null; 

using (new VersionCountDisabler()) 
{ 
    var context = new SitecoreContext(); 
    model = context.GetItem<T01_Homepage>("path"); 
} 

// Do you have data in model now? 

3)儘量封裝用SecurityDisabler相同的呼叫。只是爲了確認這不是一個安全問題。 4)如果你仍然不知道它是什麼,請用你的模型的一些(簡化)代碼更新你的問題。