是否可以将查询用作使用Glass Mapper进行Sitecore渲染的数据源?

时间:2015-01-28 15:15:08

标签: sitecore sitecore7 glass-mapper sitecore7.5

我正在使用Sitecore 7.5和Glass Mapper 3.2.3构建一个站点。当我将子布局添加到页面的演示文稿详细信息时,Glass Mapper将假定子布局的数据源应该是当前页面。我还可以通过在演示文稿详细信息对话框中选择站点上的其他页面来显式设置渲染的数据源。

enter image description here

Glass Mapper仍然可以正常工作,并使用其他所选页面作为渲染的数据源。但是,如果我尝试使用“构建查询”对话框并为我的数据源构建查询,Glass Mapper似乎忽略了这一点,只使用当前页面作为数据源。有没有办法使用我使用Build Query对话框构建的查询?

enter image description here

编辑:以下是有关我的设置的更多信息。我在Sitecore中有一个名为ContentPage的数据模板。它有一个字段:内容。我在网站中有多个页面使用此数据模板。我有一个名为sublayoutPageContent的子布局。它继承自GlassUserControl。它只是显示内容字段。如果我将此子布局添加到页面A的演示文稿详细信息中,并且不指定数据源,则它可以正常工作。当我调出页面A时,它会完美地显示页面A中的内容字段。我还可以查看子布局的演示文稿详细信息,并告诉它使用不同的页面作为数据源 - 比如页面B.如果我这样做,然后我去查看页面A,我将看到页面B中的内容字段太棒了 - 这是按预期工作的。现在我不是选择数据源的页面,而是使用Query,在Query中我选择了Page B.现在,当我查看Page A时,我看到了Page A - NOT Page的内容字段。希望能更好地解释它。

2 个答案:

答案 0 :(得分:5)

如果您支持页面编辑器并且这些源会定期变化,您可能希望使用Datsource模板和数据源位置而不是使用数据源。然后,当您通过页面编辑器添加项目时,系统将提示您创建或选择数据源项目。这使得它非常简单,特别是在您描述的场景中。您可以为数据源位置使用静态或相对路径。我经常使用类似的构造,虽然有超过1个字段,但它的效果非常好。即使您没有使用页面编辑器,也可以使用它,但最佳实践是支持页面编辑器和DMS,这使您可以灵活地使用页面编辑器。

如果您需要多个项目,这将不起作用,但根据您的描述,您似乎只需要能够在它们之间进行选择。此外,在这种情况下,您可以将一些项目分组到文件夹或其他项目下,并使用[SitecoreChildren]属性,只需获取该项目。这完全取决于您需要的灵活性以及您的要求。

答案 1 :(得分:0)

因为查询可以返回多个项目,所以您应该更改代码以期望多个项目而不是单个项目。 不确定它在webforms中是如何工作的,但是在Razor中你会做这样的事情:

更改

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<MyEntity>

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<IEnumerable<MyEntity>>