【问题标题】:Glassmapper Sitecore Multilist field is emptyGlassmapper Sitecore Multilist 字段为空
【发布时间】:2016-12-13 21:01:45
【问题描述】:

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

     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>   

我错过了什么?

【问题讨论】:

  • 我认为您的 Pagebase 类需要 SitecoreType 属性。
  • 另外,请确保您已发布您创建的所有模板和字段。
  • @Barbosa 如果是这样的话——我不应该得到基本项目的值。我得到了基本项目的所有值都很好。 Model.NavigationTile 工作正常。它仅适用于失败的多列表
  • 有人对此有任何想法吗?
  • 尝试将您的属性设置为virtual,例如public virtual string NavigationTitle { get; set; }

标签: razor model-view-controller sitecore glass-mapper tds


【解决方案1】:

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

另请参阅documentation of glassmapper

还有带有 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; }
}

【讨论】:

  • 大家谢谢。我找到了原因。虚拟是原因之一。但即使在@jammykam 建议之后它也不起作用。这是因为我犯了一个愚蠢的错误。我使用了 droplist 而不是 droplink。直到我检查了模板,我才意识到这一点。我将 jammykam 标记为答案,因为他先回复了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多