当我们从java平台切换到sitecore时,我对参数有一些疑问。这很容易在jsp中完成,但我无法找到sitecore的解决方案。 (实施由外部合作伙伴完成)
在我的cshtml中,我通过占位符函数包含其他元素:@ Html.Sitecore()。占位符(" Placholdername")
作为占位符包含的元素也可以包含其他元素作为占位符。
所以问题是:我可以传递一些参数和那些占位符吗? 就像我的父元素有一个特定的变量集,例如" i = 5",我想将这个变量传递给包含在占位符中的元素,并将它传递给占位符中包含的元素?
像: A包括B作为占位符并通过" i = 5" B包括C作为占位符并通过" i = 5"所以在C中," i"是" 5"因为"我"被设定为" 5"在A。
在当前的核心媒体平台上,我可以简单地使用以下内容:
<cm:include self="${self}" view="asdf">
<cm:param name="i" value="5"/>
</cm:include>
编辑: 我想要实现的目标如下:例如,我有以下结构:页面框架cshtml,变量i = 5,然后包含一个网格作为占位符,并将变量传递给网格。然后网格做一些数学运算,比如i = i + 5(应该等于10),然后包含一个预告片作为占位符,并将新的i = 10传递给预告片等等。
答案 0 :(得分:0)
您应该在模型中设置i
的值。然后,所有不同的视图或部分视图都应该继承相同的模型。
答案 1 :(得分:0)
您可以为渲染分配参数,但不分配给占位符。占位符应被视为一个洞。您可以动态地将内容放入其中,但无法为其分配参数。这里有一个讨论:https://sitecore.stackexchange.com/questions/2098/add-rendering-parameters-to-placeholder/2101
我能想到至少两种方法来解决你的问题:
答案 2 :(得分:0)
您可以在控制器操作方法中向ViewData
字典添加参数:
public ActionResult MyPage()
{
ContextService.Get().GetCurrent().ViewData.Add("MyKey", "MyValue");
return View();
}
然后,任何视图渲染都可以从ViewData
:
@{
var value = ViewData["MyKey"].Value;
}
或者,如果您正在使用Controller Renderings,请添加一些代码以从父页面获取ViewData,并将其添加到当前的ViewData实例中:
public ActionResult ChildRendering()
{
// Get any ViewData previously added to this ViewContext
var contextViewData = ContextService.Get().GetCurrent().ViewData;
contextViewData.ToList().ForEach(x => ViewData.Add(x.Key, x.Value));
return View();
}
您的ViewData
内容现在可在视图文件中使用。
这里将对此进行更详细的讨论:https://chrisperks.co/2017/03/06/a-workaround-for-missing-viewdata-in-sitecore-mvc/