2016-12-13 5 views
1

こんにちは、私はglassmapperを使用しています、私はマルチリスト内のすべてのアイテムを読み込みしようとしています。
マイページには、アイテムを選択できるナビゲーション、タイトル、およびマルチリストフィールドがあります。私の問題は、私はサブ項目(カウントは> 0)を読み取ることができる間、プロパティ値はnullです。しかし、サイトコアの基本的なItemプロパティがnullでない FIELDTYPEで問題が解決しなかった これらは私の2つのモデルGlassmapper Sitecore Multilistフィールドが空です

 public class Pagebase: ItemBase, INavigation 
    { 
     //Page Base 

     public string PageTitle { get; set; } 
     public string PageHeading { get; set; } 

    //Navigation 
     public string NavigationTitle { get; set; } 
     public string NavigationDescription { get; set; } 
    public IEnumerable<Pagebase> SubItems{ get; set; } 
    } 

[SitecoreType(TemplateId = "{7BC902B5-305B-484A-9AD9-6AAEBA48BDD7}", AutoMap = true)] 
public interface INavigation 
{ 

    [SitecoreField("Navigation Title")] 
     string NavigationTitle { get; set; } 

     [SitecoreField("Navigation Description")] 
     stringNavigationDescription { get; set; } 

    [SitecoreField("Sub Items")] 
     IEnumerable<Pagebase> SubItems{ get; set; } 

} 

ある私の見解では、この

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<xxx.Pagebase> 

    <div class-"test"> 
@Model.NavigationTitle // This has value 
@Model.NavigationDescription // This has correct value 
@Model.SubItems.Count // Show the correct number of Items selected in Multi list. 

// The multilist is again a Pagebase type. 
//When i do : 
    @foreach (var subItem in Model.SubItems) 
          { 
    @subItem.NavigationTitle   //This is null 
    @subItem.NavigationDescription // This is null 
    @@subitem.Id/@subitem.Url/@subitem.Name/// This is not null 
    } 
    </div> 

私は何をしないのですのようなものです?

+0

のようになります。私はあなたのPagebaseクラスのSitecoreType属性が必要だと思います。 – DougCouto

+0

また、作成したすべてのテンプレートとフィールドが公開されていることを確認してください。 – DougCouto

+0

@Barbosaその場合 - 私はベースアイテムの値を取得すべきではありません。基本アイテムのすべての値を完全にうまく取得しています。 Model.NavigationTileは機能します。失敗したマルチリストのためだけです –

答えて

1

インターフェイスの実装クラスでは、すべてのプロパティを仮想としてマークする必要があります。

もglassmapperとdocumentation of glassmapper

そしてrationale of using virtual properties参照してください。

だから、あなたの実装クラスは、この

public class Pagebase: ItemBase, INavigation 
{ 
    //Page Base 
    public virtual string PageTitle { get; set; } 
    public virtual string PageHeading { get; set; } 

    //Navigation 
    public virtual string NavigationTitle { get; set; } 
    public virtual string NavigationDescription { get; set; } 
    public virtual IEnumerable<Pagebase> SubItems{ get; set; } 
} 
+0

皆様ありがとうございます。私は理由を考え出した。バーチャルは1つの理由でした。しかし、@jammykamがそれを示唆した後でさえ、うまくいきませんでした。それは私がしたばかげたミスのためだった。私はドロップリンクの代わりにドロップリストを使用していました。私はテンプレートをチェックするまでこれを認識しませんでした。彼が最初に答えたので私はjammykamを答えとしてマークしています。 –

関連する問題