0

交叉邮件: https ://orchard.codeplex.com/discussions/461867

这是完整的场景:我有一个 EventItem 内容项,它有一个 EventItem 部分,其中包含所有自定义字段(介绍文本、议程等)。我有另一部分附加到 EventItem,称为轨道。现在的问题是我想在轨道内添加一个区域,这样我就可以通过动态区域的放置将 EventItem 中的字段渲染到轨道上。我知道我可以提取数据并将其呈现在部件内,但我希望它灵活并且更喜欢使用放置/区域。

我知道动态区域很容易与替代品一起使用,例如我的Content-EventItem.Detail替代品中的以下一个:

@Display(Model.ImageArea)

但是,我的部分使用视图模型,因此我需要预定义我使用的任何属性/对象。我也读过这个博客,但它不起作用,或者我错过了一些东西: 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>

当我使用概览区域时,部分字段根本不显示。

任何建议或信息将不胜感激。谢谢!

4

2 回答 2

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 ,它将向您展示如何展平您的模板结构,同时保持显示原始形状的能力。

于 2013-10-12T05:40:50.267 回答
1

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

于 2014-01-27T07:00:59.027 回答