【发布时间】:2017-01-11 17:16:56
【问题描述】:
我一直在尝试使用 glass mapper 实现以下目标,但无法正常工作。
我有一个主页模板,它本身没有任何字段,但继承了以下两个模板:
Navigation Template
Fields: Navigation Title
Meta Information Template
Fields: Page Title, Meta Description
我已经创建了相应的接口/类如下:
[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; }
}
当我尝试访问我的页面时,所有属性始终为空:
var context = new SitecoreContext();
var page = context.GetCurrentItem<HomePage>();
我已经尝试了几种不同的方法,但没有任何效果。此外,不同教程中描述的内容也不起作用。唯一有效的是当我直接在主页模板上添加字段时,但我不希望这样,因为我有多个页面类型,因此我想继承这些字段。
有人知道我在这里缺少什么吗?!顺便说一句,我正在使用带有 .NET 4.5 的 Sitecore 7。
【问题讨论】:
-
我不确定您是否可以在接口级别进行 AutoMap。尝试在接口属性上定义显式 [SitecoreField()] 属性并删除接口上的 AutoMap 属性。看看这是否有效。我还建议您使用 FieldId="" 映射到 GUID 而不是字段名称。
-
您好 Ruud,感谢您的回复。我删除了自动映射并添加了 fieldid。什么都没有改变。我需要启用任何东西(配置或任何东西)吗?我觉得让它工作起来并不难,这似乎是一个非常基本的场景,但我不知道我在这里缺少什么。
-
您是否正确设置了 Glass 的初始化,以便在启动时将所有模型加载到内存中?
-
我会尝试复制您的问题并回复您。
-
我试图复制您的问题,但模型适用于我的解决方案。您的模型与 Web 项目是否在不同的程序集中?如果是这样,请阅读此页面glass.lu/docs/tutorial/sitecore/tutorial20/tutorial20.html
标签: templates inheritance sitecore glass-mapper