Sitecore:如何使用代码隐藏的子布局参数?

ReF*_*cus 6 parameters layout sitecore sitecore6

如何从子布局的代码隐藏中的"参数"字段(第二个屏幕截图)中获取值?

我理解,当它被添加到项目的演示文稿细节时,我可以在渲染(特别是子布局)上获取/设置参数,正如此处所述(Sitecore 6 - 使用参数).

布局实例参数

但是,我想使用布局定义项中的参数字段.在属于布局定义的文件的代码隐藏中,我可以将父窗口转换为子布局,并且该对象也具有.Parameters属性,但是这不包含我期望的值.

布局定义参数

这是Page_Load控制代码隐藏的方法:

protected void Page_Load(object sender, EventArgs e)
{
    var sublayout = ((Sublayout)this.Parent);
    string rawParameters = Attributes["sc_parameters"];
    NameValueCollection parameters =
      Sitecore.Web.WebUtil.ParseUrlParameters(rawParameters); 
      //parameters contains values from "Additional parameters (first screenshot)

      //I do not know the sublayout item id or sublayout path, so how do I get
      //the values from the second screenshot?
}
Run Code Online (Sandbox Code Playgroud)

Doublecheck仍然不起作用,只additional parameters显示:

第1步 - 输入参数

第2步 - 将sublayout +参数添加到演示文稿中

第3步 - 在子布局上显示参数

第4步 - 验证结果

Mar*_*ino 12

像这样:

var sublayout = ((Sublayout)this.Parent);
NameValueCollection nvc = Sitecore.Web.WebUtil.ParseUrlParameters(sublayout.Parameters);
Run Code Online (Sandbox Code Playgroud)

这是一篇博文,使用扩展方法更容易.

这是Sitecore的共享源模块,它也将它包装在一个类中.它由Sitecore USA的首席技术官John West撰写.


mar*_*rto 2

您可以获取子布局上定义的参数,但这有点啰嗦。您需要首先找到正确的渲染项,然后从那里检索参数

   var sublayout = ((Sublayout)this.Parent);
   //Get all rendering
   var renderings = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true);

   //Get the first rendering that matches the current sublayout's path
   var sublayoutRendering = renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path);

   if (sublayoutRendering != null)
         Response.Write(sublayoutRendering.RenderingItem.Parameters);
Run Code Online (Sandbox Code Playgroud)

可以使用Mark的方式获取“布局详情”中设置的参数

编辑:上述解决方案可以工作,但它非常脆弱,并且取决于将来可能会发生变化的 sitecore 内部结构。我不建议您在生产中使用它。一定有更好的方法来实现你想要的。