C# 当页面上有多个相同类型的子布局时,获取渲染参数

C# 当页面上有多个相同类型的子布局时,获取渲染参数,c#,.net,sitecore,sitecore6,C#,.net,Sitecore,Sitecore6,我需要以编程方式从子布局中获取渲染参数。目前我是这样做的: 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 sublayo

我需要以编程方式从子布局中获取渲染参数。目前我是这样做的:

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)始终返回与两个子布局的子布局路径匹配的第一个渲染参数

我如何区分它们?我看不到任何东西可以用来把他们绑在一起


编辑:


为了清楚起见,我在Presentation>Details中添加了我的子布局,然后当我单击我的控件时,我在“控件属性”窗口中设置了字段。我有一个名为modulesource的字段,它总是返回相同的值-它总是填充为顺序中最高的一个。每个子布局的值肯定不同,但我无法从渲染中获取它们。

不确定是否缺少某些内容。但是可以直接在子布局上获取子布局渲染参数。我在用于所有Sitecore子布局的基本子布局上使用了以下内容,并且在多次插入的同一子布局上呈现参数时没有问题:)

受保护的Sitecore.Web.UI.WebControl.Sublayout当前Sublayout
{
得到
{
对照组c=父母;
而(c!=null&&!(c是Sitecore.Web.UI.WebControls.Sublayout))
{
c=c.父母;
如果(c==null)
打破
}
返回c作为Sitecore.Web.UI.WebControls.Sublayout;
}
}
受保护的NameValueCollection CurrentParameters
{
得到
{
如果(CurrentSublayout==null)
返回null;
NameValueCollection parms=WebUtil.ParseUrlParameters(CurrentSublayout.Parameters);
var sanitizedValues=new NameValueCollection();
for(int i=0;i
您可能需要检查子布局上的缓存设置,如果您没有可缓存的VarbyParam,它将不适用于您

这仍然只从相同类型的第一项获取参数。当你说你把它添加到你的次级布局基地时,你是什么意思?我在一个调用的函数中有这样的设置-这会有什么不同吗?如果我添加了一些经常需要的基本函数,那么我的所有Sitecore子布局都继承自我自己的子布局类。我在Sitecore版本6.1-6.5上对同一子布局的多个实例在一个页面上进行了测试。我在子布局上使用渲染参数模板来控制参数。但除此之外,我看不出问题可能是什么。您是否对特定的子布局codebehind进行参数检查?否,我们有一个函数,它接受用户控制,我们通过查看父级加载子布局,类似于您的
CurrentSublayout
属性。您在哪里更改Sitecore子布局继承的内容?好的,我们可能在这里遇到了问题:)我在“MyControl.ascx.cs”代码后面创建了一个Sitecore子布局“MyControl.ascx”,我添加了参数函数。“cs”文件继承自“System.Web.UI.UserControl”,但我用自己的文件覆盖了它,这不是它工作所必需的。这里的主要内容是,使用参数的函数位于“MyControl”代码隐藏文件中。如果你试图在一个页面上循环使用所有的渲染,那么你现在所做的只是用渲染为每个循环做一个循环
    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;
        }
    }