2

グラスマッパーで次のことを達成しようとしましたが、うまくいきません。

フィールド自体を持たないが、次の 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; }
}

次に、自分のページにアクセスしようとすると、すべての属性が常に null になります。

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 に答える