2014-04-24 17 views
5

Sto utilizzando Sitecore Glass Mapper per un nuovo progetto che sto configurando. Utilizziamo Sitecore 7.2, l'ultima versione di Team Development per la generazione di codici Sitecore (TDS) e l'ultima versione di vetro.Sitecore Glass Mapper sempre null

Il codice che sto cercando di eseguire:

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

b non è nullo. c è nullo.

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

d è nullo.

ho aggiunto il mio assemblaggio 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 }; 
} 

Quando guardo nei b.GlassContext.TypeConfigurations tutti i miei modelli sono lì.

Ho pensato che potrebbe essere un problema di lingua perché il sito è in olandese e forse la lingua sbagliata sarebbe stata risolta in modo errato. Anche questo non era il caso.

Ho disattivato WebActivator e aggiunto GlassMapperSc.Start() nel metodo Global.asax Application_Start.

Stiamo anche utilizzando Autofac come framework DI. Ma senza di esso, non funziona ancora come puoi vedere sopra. Inoltre, quando creo i miei modelli personalizzati senza generazione del codice TDS, il risultato di GetCurrentItem<T> è nullo.

Qualcuno ha un'idea di come posso risolvere questo problema?

risposta

2

Hai controllato il tuo Sites.config e la lingua predefinita per questo sito? Potrebbe esserci una differenza tra la lingua definita nella cartella delle lingue di Sitecore e la configurazione.

Ho avuto un problema simile con uno dei miei progetti in cui ho cambiato Sitecore.Context.Language in "nl" anziché "nl-NL". Il glass mapper restituirà null, ma Sitecore.Context.Database.GetItem restituirà un oggetto in questo caso.

+0

Questo ha fatto il trucco. La mia lingua era nl-nl e in sites.config il nodo siti/sito aveva la lingua degli attributi su nl. Grazie. – ydd1987

+0

Questo è interessante - sto avendo un problema simile, e infatti quando ispeziono la radice del mio sito web la lingua sembra essere impostata su "hr" - un valore che non ho mai impostato in modo esplicito, ma è il nome di un primo livello figlio del mio sito web che ho rimosso: http://screencast.com/t/aMhy7yl3 Potrebbe averlo fatto in qualche modo Sitecore/Glass.Mapper pensa che "hr" (croato) dovrebbe essere la lingua, ritornando così un oggetto nullo? –

1

La maggior parte delle volte si tratta di un problema di lingua. Il mapper restituisce un oggetto nullo quando non ci sono versioni nella lingua corrente o data.

Ciò che può creare confusione è che Sitecore.Context.Database.GetItem restituisce un oggetto, anche se non ha una versione nella lingua corrente. Assicurati di controllare quell'elemento. Le versioni ne hanno.

+0

Grazie, questa risposta in combinazione con la risposta di Aldentev ha fatto il trucco per me. – ydd1987

0

Alcune cose che si può provare (questo non si adattava nel campo commenti)

1) Verificare che i campi correlati nell'oggetto Sitecore Item contengono valori (in modo Sitecore.Context.Item per il vostro var "c" e Sitecore.Context.Database.GetItem("path") per il vostro "d" var)

2) Prova di incapsulare la chiamata GetItem/GetCurrentItem in un VersionCountDisabler, come questo:

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) Cercare di incapsulare la stessa chiamata con un SecurityDisabler. Giusto per confermare che non è un problema di sicurezza.

4) Se ancora non si sa di cosa si tratta, aggiornare la domanda con un codice (semplificato) per il proprio modello.