如何列出Orchard容器中的项目?

时间:2012-01-21 03:18:26

标签: orchardcms

在我的Orchard网站中,有一个名为Product的内容类型。它有零件Container和Routable。产品可以包含名为ProductFeature的内容类型。

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

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

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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. <{1}}中的
  3. Content-YourContentTypeName.cshtml
  4. 在我的情况下,至少它是var yourList = Model.Content.Items[1].List.Items; ,您可以检查列表所在的模型中的形状跟踪。从这里开始,一切都与1)相同。

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

答案 2 :(得分:0)

要扩展Zoran的答案,如果您不想在Items列表中硬编码Container的位置,您可以使用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)