【问题标题】:Sitecore 8: Get Sublayout item when .ascx file is sharedSitecore 8:共享 .ascx 文件时获取子布局项
【发布时间】:2015-12-03 07:29:23
【问题描述】:

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

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

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

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

编辑

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

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

【问题讨论】:

  • 你到底想做什么?我想您正在尝试动态更改列宽?你应该看看using Rendering Parameters for this type的东西......
  • @Jammy 是的。我正在按照你说的做。我浏览了博客,但有一个拦截器。模板转换之前创建的项目怎么样。我不确定这些项目在更改模板后是否会保留数据。但是,我可以使用子布局的“数据”部分中的“参数”字段。关于如何访问该字段的任何想法?
  • @Ben 我的情况有点不同。我有两个子布局项共享同一个 ascx 文件。
  • 由于 Sublayout 不是模板,使用此控件创建的项目不会丢失数据,您仍然需要将要删除的 Sublayout 的任何现有用法切换为另一个。最简单的方法是删除现有的子布局,然后在出现提示时链接到另一个项目:imgur.com/J8CMDfY

标签: sitecore sitecore7 sitecore8 sublayout


【解决方案1】:

你可以试试:

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();

【讨论】:

  • 我尝试了数据源和renderingId的方式,但没有奏效。在第二种技术中,为什么我需要对我的子布局项目进行硬编码..??我的问题是 2 个子布局共享 ascx 文件并检查哪个子布局当前正在使用 ascx 文件!
【解决方案2】:

我们在所有子布局控件都继承自的基类上具有以下方法...您可以在每个子布局上传入一个参数以识别它并使用 GetParameter 方法检索它...例如name="Grid-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;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多