2016-04-27 52 views
0

問題二我Sitecore的傳奇故事:有類似這樣的電話:Sitecore的,與GlassMapper沒有返回已知項目

var item = sitecoreService.GetItem<KnownMappedObject>(knownId) 

此代碼工作在生產,並在代碼工作正常其他大多數情況下,但是,我導航到頁面,並且此行項目爲空。

knownId是正確的,例如它存在於數據庫中,但它返回爲空。我已經從本地生產數據庫,以確保一切正確,我甚至試圖確保配置是正確的。

這個方法是否還有其他規則可以讓它返回null,即使這個物品存在?

編輯 項目在數據庫中,不知道如何查看它與哪種語言相關。內容不是多語言的。

編輯2 因此,項目從數據庫返回,數據庫中的語言建議EN。但是,當我們逐步瀏覽代碼(在sitecore中)時,它會檢查Item.Version == 0的項目。唯一的解決方法是使用VersionDisabler。我不認爲這是答案,因爲它不存在於生產中。

此外,正在傳入的「Language」對象具有當前頁面的名稱?我會認爲它是「恩」或類似的東西?

謝謝, 詹姆斯

+1

難道他項在Web數據庫存在嗎?用正確的語言? – Gatogordo

+0

您的具體類型是否缺少任何鍵映射屬性? –

回答

1

想通了。

Sitecore在此案例中將URL的第一部分作爲語言,從而使用未知語言過濾項目的版本。

導致無法返回(!由於沒有語言版本中存在)的項目

有一個設置:

<setting name="Languages.AlwaysStripLanguage" value="false"/> 

需要被假以防止這種情況發生。

謝謝, 詹姆斯

1

通常的理由是:

- 沒有上下文的語言版本(2定義單一的語言在這裏默認成 'en')

- 爲當前用戶沒有讀訪問(試用SecurityDisabler包裝)

+0

請參閱最新的編輯..更多信息 –

+0

請嘗試添加一行像'var rawItem = sitecoreService.GetItem (knownId)'檢索常規sitecore項目 - 如果它會返回正確的項目,然後問題在於投射到你的模型。如果它仍然爲空 - 請嘗試'Sitecore.Context.Database.GetItem(id)'。哪個數據庫使用您的sitecoreService? – Daniil

+0

它在模型的鑄造之前進行保釋。它沒有任何版本的內容。例如,SiteCore.Data.Items.Item對象具有.Versions屬性,它是空的。 –

相關問題