Glassmapper Sitecore Multilist字段为空

问题描述:

嗨,我正在使用glassmapper,我正在尝试读取多列表中的所有项目并填充。
我的页面有一个导航,标题和一个多列表字段,我可以选择这些项目。我的问题是,虽然我能够读取子项(计数是> 0)属性值为空。但Sitecore的基本商品属性非空 的字段类型并没有解决问题 这是我的两个模型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正常工作。它仅适用于多列表失败 –

在接口的实现类中,您需要将所有属性标记为虚拟。

又见documentation of glassmapper

而且rationale of using virtual properties与glassmapper。

所以,你的实现类看起来像这样

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

在大家谢谢。我找出原因。虚拟是一个原因。但是,即使在@jammykam提出这个建议之后,它也不起作用。这是因为我犯了愚蠢的错误。我曾经使用droplist而不是droplink。直到我查看了模板,我才意识到这一点。自从他首先回复我之后,我将jammykam标记为答案。 –