Orchard - 在零件内添加区域(具有视图模型)

时间:2013-10-11 10:28:31

标签: orchardcms orchardcms-1.6 zone

crosspost:https://orchard.codeplex.com/discussions/461867

以下是完整方案: 我有一个EventItem内容项,其中包含一个EventItem部分,其中包含所有自定义字段(介绍文本,议程等)。我有另一个附加到EventItem的部分叫做track。现在的问题是我想在轨道内添加一个区域,这样我就可以通过动态区域的位置将EventItem中的字段渲染到轨道上。我知道我可以拉取数据并将其渲染到零件内部,但我希望它具有灵活性,并且更喜欢使用贴装/区域。

我知道动态区域很容易使用替换,例如我的 Content-EventItem.Detail 替代下面的那个:

@Display(Model.ImageArea)

但是,我的部分使用了一个viewmodel所以我需要预定义我使用的任何属性/对象。我也读过这个博客,但它不起作用,或者我错过了一些东西: http://weblogs.asp.net/bleroy/archive/2011/06/30/so-what-are-zones-really.aspx

这是我的完整代码(省略了相关的代码部分):

跟踪零件模板

@{
Func<dynamic, dynamic> Zone = x => Display(x);
}

<div id="Overview-Tab" class="track-tab">
   @Zone(Model.Overview)
</div>

跟踪零件视图模型

public class DisplayAllViewModel
{
    //public Shape Overview { get; set; }
    public object Overview { get; set; }
    public List<TrackItem> Tracks { get; set; }
}

EventItem的展示位置

<Match ContentType="EventItem">
    <Match DisplayType="Detail">
    <Place
        Fields_Sections="Overview:1"
        Parts_Tracks="Content:2.5.6" />
    </Match>
</Match>

使用概览区时,“部分”字段根本不显示。

任何建议或信息都将受到高度赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

这不是展示位置和区域的工作原理:区域在内容形状中定义,而不是在下面的子形状中定义。

事实上,你制造的东西比他们需要的更困难。如果要在轨道部件模板中显示字段,可以这样做:

@{
    var eventItemPart = Model.ContentItem.EventItem;
    if (eventItemPart != null) {
       @eventItemPart.NameOfTheField.SomePropertyOfThatField
    }
}

或者,您可能需要阅读本文:http://weblogs.asp.net/bleroy/archive/2013/02/13/easy-content-templates-for-orchard-take-2.aspx,它将向您展示如何展平您的模板结构,同时保持显示原始形状的能力。

答案 1 :(得分:1)

只需添加部分@Display(WorkContext.Layout.Header)

即可