2012-07-19 51 views
0

我正在使用Sitecore,並且我有一個包含選項卡的網頁。該選項卡可以有1個或多個孩子。現在有一個促銷控件,根據選擇哪個標籤動態更改。獲取Sitecore中的「Tab」索引

所以,如果我選擇了Tab1,那麼會在該頁面顯示一些促銷活動。 Tab2可能有不同的/相同的促銷。這兩個被放置在不同的控制中。

我得到的是這樣的代碼至今:

 Sitecore.Data.Database db = Sitecore.Context.Database; 
     Item home = db.GetItem(Sitecore.Context.Site.StartPath); 
     var getItems = (from Item item in currItem.Children.InnerChildren 
         select item).ToList(); 

這個查詢的結果是3項。因爲有3個選項卡。這些選項卡是在轉發這樣的:

<asp:Repeater ID="rptPromo" runat="server" OnItemDataBound="rptPromo_ItemBound"> 
<ItemTemplate> 
    <table width="100%"> 
      <tbody> 
       <tr> 

        <td> 
         <h2><sup><sc:Text ID="txtPromo" Field="PromoText" runat="server" /></sup></h2> 
        </td> 

       </tr> 

      </tbody> 
    </table>  
</ItemTemplate> 

如何獲得它的選擇選項卡中的信息。我改變了PROMO控制在一個單獨的功能:

protected void rptPromo_ItemBound (Object sender, RepeaterItemEventArgs e) 
    { 

     Item i = e.Item.DataItem as Item; 
     Text txtPromo = e.Item.FindControl("txtPromo") as Text; 
     //txtPromo.Attributes.Add("txtPromo", txtPromo); 
     //HTMLControl hyperLinkLookUp = e.Item.FindControl("") as 
     string s; 
    } 

我該怎麼辦?

回答

0

Text控件需要知道Item上下文。如果沒有設置,它將假定您所在的當前上下文項目會導致3個重複的PromoText出現在中繼器中(或者根本沒有,如果PromoText字段不在當前上下文項目中)。

你已經對文本控件定義的Field財產,因此,所有你需要做的就是它的財產Item如下分配:

protected void rptPromo_ItemBound (Object sender, RepeaterItemEventArgs e) 
{ 
    Item i = e.Item.DataItem as Item; 
    Sitecore.Web.UI.WebControls.Text txtPromo = e.Item.FindControl("txtPromo") as Sitecore.Web.UI.WebControls.Text; 
    txtPromo.Item = i; 

    //txtPromo.Attributes.Add("txtPromo", txtPromo); 
    //HTMLControl hyperLinkLookUp = e.Item.FindControl("") as 
    string s; 
} 
+0

在哪裏?這不能解決我的問題! – 2012-07-19 21:59:01

+0

我已經更新了我的答案。也許你應該重申你的問題。這是有點不清楚你想要做什麼。 – 2012-07-19 22:35:40

+0

txtPromo沒有名爲'Item'的屬性。 – 2012-07-19 22:41:59