0

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

在此处输入图像描述

这两个子布局共享一个 ASCX 文件(不是一个好的站点核心实践,但我需要这种方式)。

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

我尝试过同时使用DatasourceRenderingId技术,但没有效果。

编辑

我想知道是否可以从子布局的“数据”部分获取“参数”字段。这可以解决问题。

在此处输入图像描述

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

4

2 回答 2

0

我们在所有子布局控件都继承自的基类上有以下方法...您可以在每个子布局上传入一个参数以识别它并使用 GetParameter 方法检索它。例如 name="Grid-1-2 “ ETC

    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;
        }
    }
于 2015-12-04T15:14:51.813 回答
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();
于 2015-12-03T07:38:50.230 回答