2014-04-24 2 views
5

새 프로젝트에 Sitecore Glass Mapper를 사용하고 있습니다. Sitecore (TDS) 코드 생성을위한 팀 개발의 최신 버전 인 Sitecore 7.2와 최신 버전의 유리를 사용하고 있습니다. Sitecore Glass Mapper 항상 null

코드

나는 실행하려고 :

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

B가 null이 아닙니다. c는 null입니다.

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

d가 null입니다.

나는 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()를 추가했습니다.

우리는 또한 DI 프레임 워크로 Autofac을 사용하고 있습니다. 그러나 그것 없이는, 당신이 위에서 볼 수 있듯이 여전히 작동하지 않습니다. 또한 TDS 코드 생성없이 내 자신의 사용자 지정 모델을 만들 때 GetCurrentItem<T>의 결과는 null입니다.

누구든지 해결할 수있는 아이디어가 있습니까?

답변

2

이 웹 사이트의 Sites.config 및 기본 언어를 확인 했습니까? Sitecore 언어 폴더에 정의 된 언어와 구성 간에는 차이가있을 수 있습니다.

Sitecore.Context.Language를 "nl-NL"대신 "nl"로 변경 한 프로젝트에서 비슷한 문제가 발생했습니다. 유리 매퍼는 null을 반환하지만 Sitecore.Context.Database.GetItem은이 경우 개체를 반환합니다.

+0

그건 속임수 였어. 내 언어는 nl-nl이고 sites.config의 사이트/사이트 노드는 nl의 속성 언어를가집니다. 감사. – ydd1987

+0

이것은 흥미 롭습니다 - 비슷한 문제가 있습니다. 실제로 웹 사이트의 루트를 조사 할 때 언어가 "hr"으로 설정되어있는 것으로 보입니다 - 결코 명시 적으로 설정하지 않은 값이지만 첫 번째 레벨의 이름입니다. 내 웹 사이트에서 삭제 한 웹 사이트의 하위 : http://screencast.com/t/aMhy7yl3 Sitecore/Glass.Mapper가 어떻게해서 'hr'(크로아티아어)이 언어 여야한다고 생각합니까? null 품목? –

1

대부분의 경우 언어 문제입니다. 현재 또는 주어진 언어로 버전이없는 경우 매퍼는 null 객체를 반환합니다.

혼동 될 수있는 점은 Sitecore.Context.Database.GetItem이 현재 언어로 된 버전이 없더라도 개체를 반환한다는 것입니다. 해당 항목을 확인하십시오. Versions에있는 항목이 있는지 확인하십시오. 당신이 Sitecore 항목 객체의 관련 분야는 당신의 "C"VAR 및 Sitecore.Context.Database.GetItem("path")에 대한 값 (그래서 Sitecore.Context.Item 포함되어 있는지 확인)

1 (이 코멘트 필드에 적합하지 않은) 시도 할 수

+0

감사합니다.이 응답은 Aldentev의 응답과 함께 나를위한 트릭입니다. – ydd1987

0

어떤 것들은 당신의 "D"VAR)

2)이처럼 VersionCountDisabler에 준 getItem/GetCurrentItem 호출을 캡슐화 해보십시오 :

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) 여전히 모르는 경우 모델에 대한 간단한 코드로 질문을 업데이트하십시오.

관련 문제