2012-05-16 19 views
0

我需要從我的子佈局中以編程方式獲取渲染參數。目前,我這樣做,因爲這樣的:當頁面上有多個相同類型的子佈局時,獲取渲染參數

var sublayout = ((Sublayout)this.Parent); 
//Get all rendering 
var renderings = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true); 

//Get the first rendering that matches the current sublayout's path 
var sublayoutRendering = renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path); 

if (sublayoutRendering != null) 
    Response.Write(sublayoutRendering.RenderingItem.Parameters); 

該解決方案從this question來了,完美的作品,直到我在頁面上相同類型的兩個sublayouts。當明顯發生這種情況時renderings.FirstOrDefault(r => r.RenderingItem.InnerItem["Path"] == sublayout.Path);始終返回匹配兩個子層佈局的子層佈局路徑的第一個渲染參數。

我該如何區分它們?我看不到任何可以用來將它們綁在一起的東西!


編輯:

要清楚,我加我sublayout在演示>詳細,然後當我點擊我的控制我設定在「控制屬性」窗口中的字段。我有一個名爲Module Source的字段,它始終回到相同的位置 - 它始終填充爲訂單中最高的一個。每個子圖層的值肯定不同,但我無法從渲染中獲取它們。

回答

1

不知道我是否錯過了一些東西。但是您可以直接在Sublayout上獲取子圖層渲染​​參數。我用我的基地Sublayout我用我所有Sitecore的sublayouts以下 - 它與同sublayout渲染參數沒有問題多次插入:)

protected Sitecore.Web.UI.WebControls.Sublayout CurrentSublayout 
    { 
     get 
     { 
      Control c = Parent; 
      while (c != null && !(c is Sitecore.Web.UI.WebControls.Sublayout)) 
      { 
       c = c.Parent; 
       if (c == null) 
        break; 
      } 

      return c as Sitecore.Web.UI.WebControls.Sublayout; 
     } 
    } 

    protected NameValueCollection CurrentParameters 
    { 
     get 
     { 
      if (CurrentSublayout == null) 
       return null; 

      NameValueCollection parms = WebUtil.ParseUrlParameters(CurrentSublayout.Parameters); 

      var sanitizedValues = new NameValueCollection(); 
      for (int i = 0; i < parms.Count; i++) 
      { 
       if (!string.IsNullOrEmpty(parms[i])) 
        sanitizedValues.Add(parms.Keys[i], parms[i]); 
      } 

      return sanitizedValues; 
     } 
    } 
+0

這仍然只從相同類型的第一個項目獲取參數。當你說你將它添加到你的SubLayout基地你是什麼意思?我在我打電話的函數中設置了這個設置 - 是否會有所作爲? – Jon

+0

我所有的Sitecore子佈局都是從我自己的Sublayout類繼承而來的,我添加了一些我通常需要的基本功能。我已經在Sitecore版本6.1-6.5上對此進行了測試,在單個頁面上有多個相同子圖層的實例。 我在我的sublayout上使用渲染參數模板來控制我的參數。但除此之外,我沒有看到問題可能。你是否讓你的參數檢查特定的sublayouts代碼隱藏? – Sandbeck

+0

不,我們有一個需要用戶控制的函數,我們通過查看父級來加載SubLayout,類似於您的CurrentSublayout 屬性。你在哪裏改變Sitecore sublayout繼承的東西? – Jon

0

你可能要檢查的緩存設置你的子佈局,如果你沒有Cacheable VarbyParam它不會爲你工作