【问题标题】:Sitecore: How to use sublayout parameters from codebehind?Sitecore:如何使用代码隐藏中的子布局参数?
【发布时间】:2011-08-22 09:29:59
【问题描述】:

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

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

但是我想使用布局定义项中的参数字段。在属于布局定义的文件的代码隐藏中,我可以将父级转换为子布局,并且该对象也有一个 .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?
}

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

【问题讨论】:

  • 你真正想在这里做什么?我不明白访问这个字段的意义,因为它在所有使用渲染的项目中都是静态的。您也可以在子布局 .ascx 或 AppSetting 值中硬编码该值...或者如果您需要在内容编辑器中获取它,则在项目模板的演示详细信息的标准值中。
  • 硬编码数据可能是一个解决方案。我将子布局用作另一个文件的容器,需要指定此文件路径和更多数据。
  • 只是为了清楚。您希望从 SublayoutItem 而不是从项目的布局详细信息字段中设置的 Sublayout 定义中获取参数。对吗?
  • @marto:其实我两个都想要……

标签: layout parameters sitecore sitecore6


【解决方案1】:

像这样:

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

Here's a blog post that make it easier to do with extension methods.

Here's a shared source module for Sitecore that wraps this up in a class as well。它由 Sitecore USA 的 CTO John West 编写。

【讨论】:

  • Parameters 属性和“sc_parameters”属性值相同,这不是我要找的不是。我正在尝试获取布局定义参数,请查看我附加的图片...
  • 出于某种原因,我相信您放入其中的内容已传递给正在使用的该组件的实例。因此,如果您添加 foo=bar 然后在绑定到项目的子布局上,这将是参数的一部分。第一个屏幕截图中的参数标签称为“附加参数”,这让我相信它们是您添加到布局定义的多行文本字段中的附加参数。您可以通过代码确认吗?请记住,参数需要采用查询字符串名称-值格式。
  • 事实并非如此。我一开始也是这么想的,但是调试告诉我事实并非如此。实际上传递了一些属于模板的值?我附加了一个自定义模板作为Standard template 的基本模板。此自定义模板中的字段/值作为参数发送...?!?
  • 我刚刚对其进行了测试,它可以按预期工作。我不确定它怎么不适合你。我在子布局定义的 MLT 参数字段(您的第二个屏幕截图)中输入了a=b&c=d。在我使用子布局的页面上,我通过代码访问参数并获得这些值。
  • 啊,这就解释了为什么它对我有用。我从未在实例本身上定义任何其他参数。
【解决方案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);

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

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

【讨论】:

  • 这是一个解决方案,是的,但是我正在寻找更可靠的东西,也许是内置的......
猜你喜欢
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多