2015-06-16 44 views
4

我有一个调用其数据源子项的呈现。每个子项都在渲染字段中附加了一个渲染。 我打电话将参数传递给使用Sitecore中的ItemRendering进行呈现

@Html.Sitecore().ItemRendering(item) 

哪个有效。

但是我想传递一些参数给孩子的渲染,所以我尝试了下面的代码;

@Html.Sitecore().ItemRendering(item, new { Parameters = "active=1" }) 

但参数没有得到传递给孩子渲染当我打电话@Html.Sitecore().CurrentRendering.Parameters["active"]

所以,我想@Html.Sitecore().ItemRendering(item, new { Active = 1 })。我在儿童渲染中再次调用它,但仍然没有运气。

有没有办法使用@Html.Sitecore().ItemRendering()

+0

尝试在视图中调用'Model.Rendering.Properties [“Active”]''。 – jammykam

+0

我是否必须将它作为新的{Parameters =“active = 1”}或新的{Active = 1}在ItemRendering中传递? –

+0

它应该是'new {Active = 1}',但是我还没有使用MVC中的参数进行静态绑定,但 – jammykam

回答

1
var viewData = new ViewDataDictionary(); 
viewData["active"] = "1"; 
Html.Sitecore().ItemRendering(ItemToRender, viewData); 

在渲染的项目将参数传递给孩子,你可以访问可视数据是这样的:

(ViewData["active"] != null && int.Parse(ViewData["active"].ToString()) == 1) 
4

ItemRendering方法不似乎正确地处理属性(或者正如期望的那样)。

解决方法是使用@Html.Sitecore().Rendering()代替。您可以像下面的解决方法一样使用该方法,如同ItemRendering方法。需要注意的是,正如你所说,你应该设置数据源项目的“渲染器”字段(或它的模板标准值),而不是“效果图”字段:

@Html.Sitecore().Rendering(item["__Renderers"], new {Datasource = item.ID, Message = "Hello World"}) 

在孩子的渲染,使用Properties属性,不是Parameters

@Html.Sitecore().CurrentRendering.Properties["Message"] 
+0

很棒,只是看到了您的博客文章。 –