2015-12-03 49 views
0

我有兩個子佈局:Grid-1-2和Grid-2-1。Sitecore 8:當共享.ascx文件時獲取Sublayout項目

enter image description here

兩個sublayouts共享一個ASCX文件(不是一個好的做法Sitecore的,但我需要它這樣)。

問題是,在ASCX代碼隱藏,我想看看當前選定的網格是否是Grid-1-2或Grid-2-1?!

我一直在使用這兩種數據源試圖RenderingId技術,但沒有效果

編輯

我想知道如果我可以從sublayout的「數據」部分獲得「參數」字段。這會做到這一點。

enter image description here

所有建議都歡迎。 請幫忙!!

+2

你究竟想要做什麼?我認爲你正在試圖動態改變列的寬度?您應該查看[使用此類型的渲染參數](https://www.captechconsulting.com/blogs/sitecore-rendering-parameters-part-1--how-and-why-to-use-rendering-parameters)的東西... – jammykam

+0

@Jammy是的。我正在做你正在說的話。我瀏覽了博客,但有一個阻攔。那麼在模板轉換之前創建的項目呢?我不確定這些項目會在更改模板後保留數據。但是,我可以使用子佈局的「數據」部分中的「參數」字段。有關如何訪問該字段的任何想法? –

+0

可能重複的[Sitecore:如何使用代碼隱藏的子佈局參數?](http://stackoverflow.com/questions/5949214/sitecore-how-to-use-sublayout-parameters-from-codebehind) –

回答

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

我試過數據源和renderingId方式,但沒有工作。在第二種技術中,爲什麼我需要硬編碼我的sublayout項目.. ??我的問題是有2個sublayouts共享ascx文件並檢查哪個sublayout當前正在使用ascx文件! –

0

我們有一個基類下面的方法,我們所有的sublayout控制繼承...你可以只傳入每個子佈局中的參數以識別它並使用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; 
     } 
    }