Sitecore MVC:将参数传递给占位符

时间:2017-03-02 14:05:13

标签: model-view-controller parameters sitecore

当我们从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传递给预告片等等。

3 个答案:

答案 0 :(得分:0)

您应该在模型中设置i的值。然后,所有不同的视图或部分视图都应该继承相同的模型。

答案 1 :(得分:0)

您可以为渲染分配参数,但不分配给占位符。占位符应被视为一个洞。您可以动态地将内容放入其中,但无法为其分配参数。这里有一个讨论:https://sitecore.stackexchange.com/questions/2098/add-rendering-parameters-to-placeholder/2101

我能想到至少两种方法来解决你的问题:

  1. 虽然您的问题有点缺乏细节,但看起来您不一定需要占位符,因为您已经知道要在这些空间内渲染的内容。如果是这种情况,那么您可以静态绑定MVC视图而不是使用占位符。这不是一种常见做法,但在Sitecore's latest training材料and elsewhere中提到它是一种在不需要占位符灵活性时进行优化的方法。这通常使用@Html.Sitecore.Rendering帮助程序完成。
  2. 您可以通过利用好的旧HttpContext.Items collection来使用各种全局变量。

答案 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/