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

Model view controller Sitecore MVC:将参数传递给占位符,model-view-controller,parameters,sitecore,Model View Controller,Parameters,Sitecore,当我们从java平台切换到sitecore时,我对参数有一些疑问。这在jsp中很容易做到,但我找不到sitecore的解决方案。(由外部合作伙伴实施) 在我的cshtml中,我通过占位符函数包括其他元素:@Html.Sitecore().placeholder(“Placholdername”) 作为占位符包含的元素也可以包含其他元素作为占位符 所以问题是:我能把一些参数和占位符一起传递吗? 就像我的父元素有一个特定的变量集,例如“i=5”,我想将此变量传递给作为占位符包含的元素,并将其传递给作

当我们从java平台切换到sitecore时,我对参数有一些疑问。这在jsp中很容易做到,但我找不到sitecore的解决方案。(由外部合作伙伴实施)

在我的cshtml中,我通过占位符函数包括其他元素:@Html.Sitecore().placeholder(“Placholdername”)

作为占位符包含的元素也可以包含其他元素作为占位符

所以问题是:我能把一些参数和占位符一起传递吗? 就像我的父元素有一个特定的变量集,例如“i=5”,我想将此变量传递给作为占位符包含的元素,并将其传递给作为占位符包含在占位符中的元素

比如: A包括B作为占位符并传递“i=5”,B包括C作为占位符并传递“i=5”,因此在C中“i”的值为“5”,因为A中“i”被设置为“5”

在当前的coremedia平台上,我可以简单地使用以下内容:

编辑:
我想要实现的是以下内容:例如,我有以下结构:带有变量I=5的页面框架cshtml,然后包含一个网格作为占位符,并将变量传递给网格。然后网格进行一些数学运算,比如i=i+5(应该等于10),然后包含一个摘要作为占位符,并将新的i=10传递给摘要,以此类推。

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

您可以将参数指定给渲染,但不能指定给占位符。占位符应视为孔。您可以动态地将内容放入其中,但不能为其分配参数。这里有一个讨论:

我可以想出至少两种方法来解决您的问题:

  • 虽然您的问题有点缺乏细节,但看起来您不一定需要占位符,因为您已经知道要在这些空间中渲染什么。如果是这种情况,那么可以静态绑定MVC视图,而不是使用占位符。这不是一种常见做法,但在材料中提到,当您不需要占位符的灵活性时,这是一种优化方法。这通常是使用助手完成的
  • 您可以通过利用好的旧变量来使用某种全局变量

  • 您可以在控制器操作方法中将参数添加到
    ViewData
    字典中:

    public ActionResult MyPage()
    {
        ContextService.Get().GetCurrent().ViewData.Add("MyKey", "MyValue");
        return View();
    }
    
    然后,任何视图渲染都可以从
    ViewData
    访问参数:

    @{
        var value = ViewData["MyKey"].Value;
    }
    
    或者,如果正在使用控制器渲染,请添加一些代码以从父页面获取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
    内容现在将在视图文件中可用


    此处将对此进行更详细的讨论:

    是否从Sitecore检索值,然后将其传递给不同的视图?否,该值在基本cshtml文件中设置,并应传递给所有子元素。我希望实现以下目标:例如,我有以下结构:带有变量I=5的页面框架,然后包含一个网格作为占位符,并将变量传递给网格。网格然后做一些数学运算,比如i=i+5(应该等于10),然后包含一个摘要作为占位符,并将新的i=10传递给摘要,等等……细节:网站上的每个组件都需要知道它在引导网格系统中的宽度。假设页面框架有一个col-8,其中有一个占位符,那么8/12应该传递给我放在占位符中的元素。在这个占位符中,我放入了一个带有两个col-6的网格,这两列中都有占位符,可以放入其他组件。因此网格接收8/12作为父宽度,并应将“8/12*6/12”传递给网格中的组件,以便组件“知道”它们的网站宽度为4/12。如果中间没有网格,组件就会知道它的8/12宽度。你不能根据需要使用CSS来设置组件的样式吗?e、 g.
    .col-8.col-6.组件样式
    ?您需要在C代码中访问这些详细信息吗?