Sitecore 8:共享.ascx文件时获取Sublayout项目

时间:2015-12-03 07:29:23

标签: sitecore sitecore7 sitecore8 sublayout

我有两个子布局: Grid-1-2和Grid-2-1。

enter image description here

这两个子布局共享一个ASCX文件(不是一个很好的sitecore练习,但我需要这样做)。

问题是在ASCX代码隐藏中,我想看看当前选择的网格是Grid-1-2还是Grid-2-1?

我尝试使用数据源 RenderingId 技术,但没有效果。

编辑

我想知道我是否可以从子布局的“数据”部分获取“参数”字段。这样就可以了。

enter image description here

欢迎所有建议。 请帮助!!

2 个答案:

答案 0 :(得分:0)

你可以尝试:

Sitecore.Context.Database.GetItem(((Sublayout)Parent).DataSource);

另外一个选择是:

LayoutDefinition layoutDef = LayoutDefinition.Parse(Sitecore.Context.Item.Fields["__renderings"].Value);
string deviceId = Sitecore.Context.Device.ID.ToString();
DeviceDefinition curDeviceDef = layoutDef.GetDevice(deviceId);
RenderingDefinition renderingDef = curDeviceDef.GetRendering(Sitecore.Context.Database.Items["/sitecore/Layout/SubLayouts/MySublayout"].ID.ToString());
int controlIndex = curDeviceDef.GetIndex(renderingDef.UniqueId);
Control MyDotNetControl = Sitecore.Context.Page.Renderings[controlIndex].GetControl();

答案 1 :(得分:0)

我们在基类上有以下方法,我们所有的子布局控件都继承自...你可以在每个子布局上传入一个参数来识别它并使用GetParameter方法检索它。名称="网格-1-2"等

    public string GetParameter(string key, string defaultValue = null)
    {
        Sublayout s = this.SitecoreSublayout;
        if (s != null)
        {
            if (!String.IsNullOrWhiteSpace(s.Parameters))
            {
                NameValueCollection pars = HttpUtility.ParseQueryString(s.Parameters);
                if (pars != null)
                {
                    return pars[key];
                }
            }
        }
        return defaultValue;
    }

    protected Sublayout SitecoreSublayout
    {
        get
        {
            Sublayout parent = this.Parent as Sublayout;
            return parent;
        }
    }