2

我一直在尝试使用玻璃映射器实现以下目标,但无法使其正常工作。

我有一个主页模板,它本身没有任何字段,但继承了以下两个模板:

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,如果这有所作为的话。

4

4 回答 4

2

您的字段未映射,因为您在 Sitecore 模板的字段名中使用了空格。删除空格或将属性添加[SitecoreField(FieldName ="Page Title")]到模型。

我认为 Homepage 类正在尝试将 Homepage 模板上的 NavigationTitle 与 fieldName NavigationTitle 映射,并忽略基本模型上的 FieldName 属性。

顺便说一句:我只为我正在处理的当前项目使用接口,它可以按预期使用继承。无需多次添加属性;)

于 2013-10-24T18:52:15.623 回答
1

尝试将推断类型设置为 true。如果没有那一套,我根本无法让它工作。

前任。

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

或者

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

我发现没有这一套是行不通的。

于 2014-02-06T19:38:07.927 回答
0

您应该将单独的子布局中的公共字段呈现为 GlassUserControl。

public partial class NavigationTemplate : GlassUserControl<NavigationTemplate>
{

    protected void Page_Load(object sender, EventArgs e)

在这里,无论您加载什么项目,您都可以直接访问 NavigationTemplate 字段,它将始终转换为 NavigationTemplate 并读取您正在加载的项目的字段值。

于 2015-05-14T02:56:03.260 回答
0

您似乎希望获得 HomePage 实例上的属性,但您需要询问包含此处所示属性的确切接口

即而不是这样做:

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

您应该将当前项目显式获取为 INavigation 并从界面获取字段:

var navigationTitle = context.GetCurrentItem<INavigation>().NavigationTitle;
于 2017-01-11T09:16:56.757 回答