如何在Sitecore中使用Inversion of Control概念来显示非页面项目?

时间:2011-09-27 15:10:36

标签: inversion-of-control sitecore

我有很多非页面内容项目,我在Sitecore中构建的网站页面一侧用作“标注”。理想情况下,我希望能够独立定义这些标注的演示信息。然后,当CMS作者为站点中的特定页面选择标注时,他们知道如何显示自己。我在这里阅读了一篇关于如何执行此操作的优秀博文:http://www.awareweb.com/AwareBlog/InversionControl2.aspx。我使用了他在帖子中描述的第一种方法。

然而,我对该代码的实现并不完全有效。它似乎获得了正确的渲染,并通过选定的非页面标注项正确迭代。但是当它在页面上显示它们时,似乎标注项仍然使用Sitecore.Context.Item作为它们的源项而不是通过strDataSource变量传递给它们的源项,如示例代码中所示。

我是否必须在后面的代码中为标注的子布局做一些特殊操作,告诉他们不要使用Sitecore.Context.Item而是使用传入的源项?否则我无法弄清楚为什么它不起作用。有什么想法吗?

谢谢, 科里

1 个答案:

答案 0 :(得分:4)

在子布局中设置DataSource并未将Context.Item显式设置为不同的值,它只是在子布局中设置一个可以自行使用的属性。

而不是再次写出解决方案,John West的博客已经在这里介绍了这个主题,所以我建议你阅读 - http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/How-to-Apply-Data-Sources-to-Sitecore-ASPNET-Presentation-Components.aspx

我建议使用SublayoutParameterHelper共享源库,它提供一个帮助器和一个基类,用于子布局,用于访问由DataSource中设置的ID表示的Item;约翰还在他的博客文章中引用了这个图书馆。