使用Placement.info在Orchard CMS中显示自定义内容部件的摘要视图的问题

时间:2011-10-18 19:58:48

标签: .net asp.net-mvc asp.net-mvc-3 orchardcms

我创建了一个名为PresentationPart的自定义零件,并将其放置。

在placement.info我有

<Match ContentType="Presentation">
    <Match DisplayType="Summary">
        <Place Parts_PresentationPart_Summary="Content:after"/>
    </Match>
    <Match DisplayType="Detail">
        <Place Parts_PresentationPart="Content:after"/>
    </Match>
</Match>

文件夹布局是

Views ->
    EditorTemplates ->
        Parts ->
            Parts_PresentationPart.cshtml   
    Parts ->
         Parts_PresentationPart.cshtml
         Parts_PresentationPart.Summary.cshtml

从不使用视图Parts_PresentationPart_Summary(尝试在列表视图中显示摘要)。

如果我将Placement.info的Presentation Summary匹配区域修改为

<Match DisplayType="Summary">
    <Place Parts_PresentationPart="Content:before"/>
    <Place Parts_PresentationPart_Summary="Content:after"/>
</Match>

将显示普通视图。

要显示摘要视图需要什么?或者有什么东西我完全不跳过了吗?

编辑:我在显示驱动程序中跳过了CombinedResult。

原文:

protected override DriverResult Display(PresentationPart part, string displayType, dynamic shapeHelper)
{
    return ContentShape("Parts_PresentationPart",() => shapeHelper.Parts_PresentationPart(ContentItem: part.ContentItem, Name: part.Name)));
}

所以我需要的是这样的东西?

var driverResults = new List<DriverResult>();
driverResults.Add(ContentShape("Parts_PresentationPart", () => shapeHelper.Parts_PresentationPart(ContentItem: part.ContentItem, Name: part.Name)));
driverResults.Add(ContentShape("Parts_PresentationPart_Summary",() => shapeHelper.Parts_PresentationPart(ContentItem: part.ContentItem, Name: part.Name)));
return new CombinedResult(driverResults);

1 个答案:

答案 0 :(得分:2)

将“正常”和“摘要”形状视为完全独立的形状。 这就是说,在显示摘要时你应该不显示“正常”的一个(反之亦然):

<Match DisplayType="Summary">
    <Place Parts_PresentationPart="-"/>
    <Place Parts_PresentationPart_Summary="Content:after"/>
</Match>

您尚未发布驱动程序显示方法,因此我不确定您从中返回了什么...

要使此方案有效,您应该返回 CombinedResult,其中包含正常和“摘要”形状。然后,显示管理器可以根据存储在Placement.info 中的数据决定显示哪一个。