2013-10-24 2 views
2

글래스 매퍼로 다음을 달성하려고했지만 제대로 작동하지 않습니다.Glass Mapper로 Sitecore 템플릿 상속을 구현하는 방법

Navigation Template

Fields: Navigation Title

Meta Information Template

Fields: Page Title, Meta Description

I :

나는 어떤 분야 자체가 있지만 다음과 같은 두 가지 템플릿을 상속하지 않는 홈 페이지 템플릿을 해당 인터페이스/cla를 만들었습니다. SSES 다음과 같이 : 다음 내 페이지에 액세스하려고하면

[SitecoreType(TemplateId = "{5BAB563C-12AD-4398-8C4A-BF623F7DBCDC}", AutoMap = true)] 
public interface INavigation 
{ 
    [SitecoreField(FieldName = "Navigation Title")] 
    string NavigationTitle { get; set; } 
} 

[SitecoreType(TemplateId = "{95539498-31A5-4CB5-8DD6-C422D505C482}", AutoMap = true)] 
public interface IMetaInformation 
{ 
    [SitecoreField] 
    string PageTitle { get; set; } 

    [SitecoreField] 
    string MetaDescription { get; set; } 
} 

[SitecoreType(TemplateId = "{F08693E5-8660-4B13-BBD6-7B9DC6091750}", AutoMap = true)] 
public class HomePage : INavigation, IMetaInformation 
{ 
    public virtual string NavigationTitle { get; set; } 

    public virtual string PageTitle { get; set; } 

    public virtual string MetaDescription { get; set; } 
} 

모든 속성은 항상 null입니다 : 나는이에 여러 가지 방법을 시도했지만 아무것도 작동하지 않습니다

var context = new SitecoreContext(); 
var page = context.GetCurrentItem<HomePage>(); 

. 또한 다른 자습서에서 설명한 내용이 효과가 없습니다. 유일한 방법은 홈 페이지 템플릿에 필드를 직접 추가하는 것이지만 두 개 이상의 페이지 유형을 갖고 있으므로 필드를 상속 받기를 원하기 때문에 원하지 않습니다.

누구나 내가 여기에없는 것을 알 수 있습니까?! 차이점이 있다면 Sitecore 7 with .NET 4.5를 사용하고 있습니다.

+0

난 당신이 인터페이스 수준에서 오토 할 수 있는지 확실하지 않습니다. 인터페이스 속성에 명시적인 [SitecoreField()] 특성을 정의하고 인터페이스의 AutoMap 속성을 제거하십시오. 그게 작동하는지 확인하십시오. 또한 FieldId = ""를 사용하여 필드 이름 대신 GUID에 매핑하는 것이 좋습니다. –

+0

안녕하세요, Ruud, 답장을 보내 주셔서 감사합니다. 나는 automap을 제거하고 대신 fieldid를 추가했다. 아무것도 변경되지 않았습니다. 아무것도 (configs 또는 무엇이든) 활성화해야합니까? 이 작업을 수행하기가 어려울 것 같지 않은데, 아주 기본적인 시나리오처럼 보이지만 여기서 내가 무엇을 놓치고 있는지 전혀 알지 못합니다. – 5earch

+1

시작시 메모리의 모든 모델을로드 할 수 있도록 Glass 초기화를 올바르게 설정 했습니까? –

답변

2

Sitecore 템플릿의 필드 이름에 공백을 사용했기 때문에 필드가 매핑되지 않았습니다. 공백을 제거하거나 [SitecoreField(FieldName ="Page Title")] 특성을 모델에 추가하십시오.

Homepage 클래스가 NavigationTitle을 홈페이지 템플릿의 NavigationTitle과 mapName의 NavigationTitle에 매핑하려고 시도하고 기본 모델의 FieldName 특성을 무시한다고 생각합니다.

By : 나는 현재 작업하고있는 프로젝트에만 인터페이스를 사용하고 있으며 상속을 통해 예상대로 작동합니다. 한 번 더 속성을 추가 할 필요가 없습니다.)

1

유추 유형을 true로 설정하십시오. 나는 그 일을하지 않고는 전혀 일을 할 수 없다.

ex.

context.GetCurrentItem<HomePage>(false, true); 

item.GlassCast<HomePage>(false, true); 

또는

이 나는이 설정없이 작동하지 않는 것을 발견했습니다.

0

별도의 하위 레이아웃에서 일반 필드를 GlassUserControl로 렌더링해야합니다.

public partial class NavigationTemplate : GlassUserControl<NavigationTemplate> 
{ 

    protected void Page_Load(object sender, EventArgs e) 

여기에서, 그것은 항상 NavigationTemplate으로 캐스팅됩니다 상관없이로드 어떤 항목 NavigationTemplate 필드에 직접 액세스 할 수 없습니다 당신이로드 항목의 필드 값을 읽습니다.

0

당신이 홈페이지 인스턴스의 속성을 얻을 것으로 예상 것 같다,하지만 당신은

here을 볼 때 속성을 포함하는 정확한 인터페이스에 요청해야 즉, 대신 일을 :

var page = context.GetCurrentItem<HomePage>(); 

명시 적으로 INavigation으로 현재 항목을 받아야하고, 인터페이스에서 필드를 얻을 :

var navigationTitle = context.GetCurrentItem<INavigation>().NavigationTitle;