Orchardcms 如何在Orchard容器中列出项目?

Orchardcms 如何在Orchard容器中列出项目?,orchardcms,Orchardcms,在我的Orchard站点中,有一个名为Product的内容类型。它具有零件容器和可路由性。产品可以包含名为ProductFeature的内容类型 当浏览到路由url时,我已经覆盖了view Content-Product.cshtml以修改html。 在此视图中,如何获取产品包含的所有ProductFeature的列表? 这篇文章展示了如何为博客小部件实现这一点。 我很难找到如何在产品的内容视图中做到这一点。上面示例中的代码抛出一个null异常错误,因此模型结构必须不同。我尝试在VisualS

在我的Orchard站点中,有一个名为Product的内容类型。它具有零件容器和可路由性。产品可以包含名为ProductFeature的内容类型

当浏览到路由url时,我已经覆盖了view Content-Product.cshtml以修改html。 在此视图中,如何获取产品包含的所有ProductFeature的列表?

这篇文章展示了如何为博客小部件实现这一点。

我很难找到如何在产品的内容视图中做到这一点。上面示例中的代码抛出一个null异常错误,因此模型结构必须不同。我尝试在VisualStudio中使用形状跟踪或调试查看模型,但找不到包含的项


任何帮助都将不胜感激。

如果您确保placement.info包含容器零件,那么您的功能列表应该已经显示出来。

我使用两个选项(我知道伯特兰会说它们难看而且没有必要,因为他一直在努力为我们提供许多其他工具,但如果你还没有掌握果园的全部美丽和它的巧妙之处,你就需要这些技巧。)

这里有两个:

  • 创建部分视图
    Parts.Container.Contained YourContentTypeName.cshtml

    内部:

    @foreach (var p in Model.List.Items)
    {
       // regular content parts, Title and Body
       string title = p.ContentItem.TitlePart.Title;
       string body = p.ContentItem.BodyPart.Text;
    
       // Your custome content parts
       string something = p.ContentItem.YourContentPartName.YourContentPartFieldName.Value;
    }
    
  • 在内容YourContentTypeName.cshtml中:

    var yourList = Model.Content.Items[1].List.Items;
    
  • 至少是
    Items[1]
    在我的例子中,您可以在列表所在的模型中检查形状跟踪。从这里开始,一切都与1相同)


    希望它能帮助那些偶然发现这条线索的人,像我几周前那样寻找这个解决方案。

    要进一步了解Zoran的答案,如果你不想硬编码项目列表中容器的位置,你可以使用LINQ:

    IEnumerable<dynamic> items = Model.Content.Items;
    var container = (from item in items
                     where (item.ContentPart.PartDefinition.Name == "ContainerPart")
                     select item).ElementAt(0);
    

    我希望能够从顶层视图中的访问包含的项目。有什么方法可以做到这一点吗?您可以在内容管理器中查询CommonPartRecord,其中容器是您的内容项。@BertrandLeRoy您能提供一个您在上面的评论中提到的查询示例吗?这是否可以在包含容器内容部分的内容类型的备用视图中执行?
    contentManager.Query()。其中(c=>c.Container.Id==theIdOfYourContainer)。List()
    我假设必须在自定义模块的驱动程序中执行此查询。是吗?你知道吗?我正试图做同样的事情,无法理解贝特朗·勒罗伊的答案。
    @Display(container.List.Items)