【问题标题】:How to list items in Orchard container?如何列出 Orchard 容器中的项目?
【发布时间】:2012-01-21 03:18:26
【问题描述】:

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

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

这篇文章展示了如何为博客小部件执行此操作。 http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx

我很难在产品的内容视图中找到如何执行此操作。上例中的代码抛出空异常错误,因此模型结构必须不同。我尝试在 Visual Studio 中使用 Shape Tracing 或调试查看模型,但找不到包含的项目。

任何帮助将不胜感激。

【问题讨论】:

  • 你有没有想过这个问题?我正在尝试做同样的事情,但无法理解 Bertrand Le Roy 的回答。

标签: orchardcms


【解决方案1】:

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

【讨论】:

  • 我希望能够从顶级视图中访问包含的项目。有什么办法吗?
  • 您可以在内容管理器中查询 CommonPartRecord,其中容器是您的内容项。
  • @BertrandLeRoy 你能提供一个你在上面评论中提到的查询的例子吗?这是否可以在具有容器内容部分的内容类型的替代视图中完成?
  • contentManager.Query<CommonPart, CommonPartRecord>().Where(c => c.Container.Id == theIdOfYourContainer).List()
  • 我假设这个查询必须在自定义模块的驱动程序中进行。对吗?
【解决方案2】:

我使用了两个选项(我知道 Bertrand 会称它们为丑陋和不必要的,因为他努力为我们提供了许多其他工具,但如果您还没有掌握 Orchard 的全部美感以及它的巧妙之处,你需要这些技巧。)

所以这里有 2 个:

  1. 创建局部视图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;
    }
    
  2. Content-YourContentTypeName.cshtml:

    var yourList = Model.Content.Items[1].List.Items;
    

至少在我的情况下是Items[1],您可以在列表所在的模型中检查形状跟踪。从这里开始,一切都与 1) 相同。

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

【讨论】:

    【解决方案3】:

    为了扩展 Zoran 的答案,如果您不想硬编码 Container 在 Items 列表中的位置,您可以使用 LINQ:

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

    ...

    @Display(container.List.Items)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多