当页面上有多个相同类型的子布局时获取呈现参数
本文关键字:布局 获取 参数 同类型 | 更新日期: 2023-09-27 18:34:24
我需要以编程方式从我的子布局中获取渲染参数。目前我是这样做的:
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);
这个解决方案来自这个问题,并且在页面上有两个相同类型的子布局之前才能完美运行。当这种情况明显发生时renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path);
始终返回与两个子布局的子布局路径匹配的第一个渲染参数。
如何区分它们?我看不到任何可以用来将它们绑在一起的东西!
编辑:
为了清楚起见,我在演示文稿>详细信息中添加了我的子布局,然后当我单击我的控件时,我在"控件属性"窗口中设置了字段。我有一个名为模块源的字段,它总是返回相同的 - 它总是填充为顺序中最高的一个。每个子布局的值肯定不同,但我无法从渲染中获取它们。
不确定我是否遗漏了什么。但是,您可以直接在子布局上获取子布局渲染参数。我在我用于所有 Sitecore 子布局的基本子布局上使用以下内容 - 在多次插入的同一子布局上呈现参数没有问题:)
protected Sitecore.Web.UI.WebControls.Sublayout CurrentSublayout
{
get
{
Control c = Parent;
while (c != null && !(c is Sitecore.Web.UI.WebControls.Sublayout))
{
c = c.Parent;
if (c == null)
break;
}
return c as Sitecore.Web.UI.WebControls.Sublayout;
}
}
protected NameValueCollection CurrentParameters
{
get
{
if (CurrentSublayout == null)
return null;
NameValueCollection parms = WebUtil.ParseUrlParameters(CurrentSublayout.Parameters);
var sanitizedValues = new NameValueCollection();
for (int i = 0; i < parms.Count; i++)
{
if (!string.IsNullOrEmpty(parms[i]))
sanitizedValues.Add(parms.Keys[i], parms[i]);
}
return sanitizedValues;
}
}
您可能需要检查子布局上的缓存设置,如果您没有可缓存的 VarbyParam,它不适合您