2014-04-24 13 views
5

Ich verwende Sitecore Glass Mapper für ein neues Projekt, das ich gerade aufstelle. Wir verwenden Sitecore 7.2, die neueste Version der Teamentwicklung für Sitecore (TDS) -Code-Generierung und die neueste Version von Glas.Sitecore Glass Mapper immer null

Der Code Ich versuche auszuführen:

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

b nicht Null ist. c ist null.

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

d ist null.

Ich habe meine Montage in GlassMapperScCustom:

public static IConfigurationLoader[] GlassLoaders(){    

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

    return new IConfigurationLoader[] { attributes }; 
} 

Als ich in b.GlassContext.TypeConfigurations sehen alle meine Modelle gibt.

Ich dachte, es könnte ein Sprachproblem sein, weil die Seite auf Holländisch ist und vielleicht die falsche Sprache falsch aufgelöst würde. Dies war auch nicht der Fall.

Ich habe WebActivator deaktiviert und die GlassMapperSc.Start() in meiner Global.asax Application_Start-Methode hinzugefügt.

Wir verwenden auch Autofac als DI-Framework. Aber ohne es funktioniert es immer noch nicht, wie Sie oben sehen können. Auch wenn ich meine eigenen benutzerdefinierten Modelle ohne TDS-Codegenerierung erstelle, ist das Ergebnis von GetCurrentItem<T> null.

Hat jemand eine Idee, wie ich das beheben kann?

Antwort

2

Haben Sie Ihre Sites.config und die Standardsprache für diese Website überprüft? Es kann einen Unterschied zwischen der in Ihrem Sitecore-Sprachenordner definierten Sprache und Ihrer Konfiguration geben.

Ich hatte ein ähnliches Problem mit einem meiner Projekte, wo ich die Sitecore.Context.Language zu "nl" statt "nl-NL" geändert habe. Der Glaszuordner gibt null zurück, aber Sitecore.Context.Database.GetItem gibt in diesem Fall ein Objekt zurück.

+0

Das hat den Trick gemacht. Meine Sprache war nl-nl und in sites.config hatte der site/site-Knoten die Attributsprache auf nl. Vielen Dank. – ydd1987

+0

Das ist interessant - ich habe ein ähnliches Problem, und tatsächlich, wenn ich die Wurzel meiner Website überprüfe, scheint die Sprache auf "hr" eingestellt zu sein - ein Wert, den ich nie explizit setze, aber es ist der Name einer ersten Ebene Kind meiner Website, die ich seitdem entfernt habe: http://screencast.com/t/aMhy7yl3 Konnte dies irgendwie Sitecore/Glass.Mapper denken, dass "hr" (Kroatisch) sollte die Sprache sein, damit zurück ein Nullelement? –

1

Meistens ist es ein Sprachproblem. Der Mapper gibt ein Null-Objekt zurück, wenn Sie keine Versionen in der aktuellen oder der angegebenen Sprache haben.

Was verwirrend sein kann, ist, dass Sitecore.Context.Database.GetItem ein Objekt zurückgibt, auch wenn es keine Version in der aktuellen Sprache hat. Achten Sie darauf, dieses Element zu überprüfen.

+0

Danke, diese Antwort in Kombination mit der Antwort von Aldentev hat den Trick für mich getan. – ydd1987

0

Einige Dinge, die Sie versuchen können

1 (nicht im Kommentarfeld paßten)) Bestätigen Sie, dass die entsprechenden Felder in dem Objekt Sitecores Artikel Werte enthalten (so Sitecore.Context.Item für „c“ var und Sitecore.Context.Database.GetItem("path") für Ihre "d" var)

2) Versuchen Sie, die GetItem/GetCurrentItem Anruf in einem VersionCountDisabler, wie dies zu kapseln:

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) Versuchen Sie kapseln den gleichen Anruf mit einem SecurityDisabler. Nur um zu bestätigen, dass es kein Sicherheitsproblem ist.

4) Wenn Sie immer noch nicht wissen, was es ist, aktualisieren Sie bitte Ihre Frage mit einem (vereinfachten) Code für Ihr Modell.