1

嗨,我正在使用 glassmapper,我正在尝试读取多列表中的所有项目并进行填充。
我的页面有一个导航、标题和一个多列表字段,我可以在其中选择项目。我的问题是,虽然我能够读取子项目(计数 > 0),但属性值为空。但是Sitecore的基本Item属性不为空Fieldtype并没有解决问题这是我的两个Model

     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>   

我错过了什么??

4

1 回答 1

1

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

另请参阅glassmapper 的文档

以及使用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; }
}
于 2016-12-15T11:38:23.163 回答