我有两个子布局:Grid-1-2 和 Grid-2-1。
这两个子布局共享一个 ASCX 文件(不是一个好的站点核心实践,但我需要这种方式)。
问题是在 ASCX 代码隐藏中,我想查看当前选择的网格是 Grid-1-2 还是 Grid-2-1 ?!
我尝试过同时使用Datasource和RenderingId技术,但没有效果。
编辑
我想知道是否可以从子布局的“数据”部分获取“参数”字段。这可以解决问题。
欢迎所有建议。请帮忙 !!
我们在所有子布局控件都继承自的基类上有以下方法...您可以在每个子布局上传入一个参数以识别它并使用 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;
}
}
你可以试试:
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();