Layout Sitecore:如何使用codebehind的子布局参数?

Layout Sitecore:如何使用codebehind的子布局参数?,layout,parameters,sitecore,sitecore6,Layout,Parameters,Sitecore,Sitecore6,如何从子布局代码背后的“参数”字段(第二个屏幕截图)中获取值? 我知道,当渲染(特别是子布局)添加到项目的演示详细信息时,我可以获取/设置渲染的参数,正如这里所述() 但是,我希望使用布局定义项中的参数字段。在属于布局定义的文件的codebehind中,我可以将父对象强制转换为子布局,并且该对象还具有.Parameters属性,但是它不包含我期望的值 这是控制代码隐藏中的Page\u Load方法: protected void Page_Load(object sender, EventA

如何从子布局代码背后的“参数”字段(第二个屏幕截图)中获取值?

我知道,当渲染(特别是子布局)添加到项目的演示详细信息时,我可以获取/设置渲染的参数,正如这里所述()

但是,我希望使用布局定义项中的参数字段。在属于布局定义的文件的codebehind中,我可以将父对象强制转换为子布局,并且该对象还具有
.Parameters
属性,但是它不包含我期望的值

这是控制代码隐藏中的
Page\u 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?
}
Doublecheck仍然不起作用,只显示了
附加参数

像这样:

var sublayout = ((Sublayout)this.Parent);
NameValueCollection nvc = Sitecore.Web.WebUtil.ParseUrlParameters(sublayout.Parameters);


。它是由美国Sitecore的首席技术官John West编写的。

您可以获得子布局上定义的参数,但它有点冗长。您需要首先找到正确的渲染项,然后从中检索参数

   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);
您可以使用Mark的方法获取“布局详细信息”中设置的参数的参数


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

参数属性和“sc_参数”属性值是相同的,这不是我想要的。我正在尝试获取布局定义参数,请查看我的附加图像…出于某种原因,我相信您在其中输入的内容会传递给正在使用的组件的实例。因此,如果添加
foo=bar
,则在绑定到项目的子布局上,这将是参数的一部分。第一个屏幕截图中的参数标签称为“附加参数”,这使我相信它们是您添加到布局定义的多行文本字段中的附加参数。你能通过密码确认吗?请记住,参数需要采用查询字符串名称值格式。情况并非如此。我最初的想法是一样的,但调试表明情况并非如此。实际上,传递了一些属于模板的值??我附加了一个自定义模板作为标准模板的基础模板。此自定义模板中的字段/值作为参数发送。。。?!?我只是测试了一下,它的工作原理和我预期的一样。我不知道这怎么不适合你。我在子布局定义的MLT参数字段(您的第二个屏幕截图)中输入了
a=b&c=d
。在我使用子布局的页面上,我通过代码访问参数,得到这些值。啊,这解释了为什么它对我有效。我从未在实例本身上定义过任何其他参数。您在这里真正想做什么?我不理解访问此字段的意义,因为它在使用渲染的所有项目中都是静态的。您还可以硬编码sublayout.ascx中的值,或AppSetting值。。。或者,如果您需要在内容编辑器中找到它,则可以在项目模板的演示文稿详细信息的标准值中找到。硬编码数据可能是一个解决方案。我正在使用子布局作为另一个文件的容器,需要指定此文件路径和一些其他数据。您希望从子布局项目中获取参数,而不是从项目的“布局详细信息”字段中设置的子布局定义中获取参数。是吗?@marto:事实上,我两者都想要……这是一个解决方案是的,但我正在寻找更坚实的东西,也许是内置的。。。