我有两个子布局: Grid-1-2和Grid-2-1。
这两个子布局共享一个ASCX文件(不是一个很好的sitecore练习,但我需要这样做)。
问题是在ASCX代码隐藏中,我想看看当前选择的网格是Grid-1-2还是Grid-2-1?
我尝试使用数据源和 RenderingId 技术,但没有效果。
编辑
我想知道我是否可以从子布局的“数据”部分获取“参数”字段。这样就可以了。
欢迎所有建议。 请帮助!!
答案 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;
}
}