2012-07-20 59 views
0

我有2個標籤作爲一個Sitecore.Web.UI.WebControls.Link鏈接。現在,當頁面開放時,我想專注於第一個。我寫了這段代碼,但似乎只有它的第二個索引2次。所以我得到了兩個選項卡作爲選定的項目。這裏是代碼:如何關注sitecore中的選項卡?

protected void rptTab_ItemBound(Object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      Item i = e.Item.DataItem as Item; 
      Link hlTabLink; 
      HtmlControl liHTML; 
      liHTML = e.Item.FindControl("liTabTest") as HtmlControl; 
      hlTabLink = e.Item.FindControl("hlTabLink") as Link; 
      hlTabLink.Target = Sitecore.Links.LinkManager.GetItemUrl(i); 
      hlTabLink.DataSource = i.Paths.FullPath; 
      hlTabLink.Field = "Title"; 
      String liContainerId; 
      switch (hlTabLink.TabIndex) //Switch case statements for the tab navigation. 
      { 
       case 0: 
        liContainerId = "tab-label TabbedPanelsTabSelected"; 
        liHTML.Attributes.Add("class", liContainerId);     
        break; 
       case 1: 
        liContainerId = "tab-label TabbedPanelsTabSelected"; 
        hlTabLink.CssClass = "tab-label TabbedPanelsTabSelected"; 
        break; 
       case 2: 
        liContainerId = "tab-label last"; 
        hlTabLink.Attributes.Add("class", liContainerId); 
        break; 
      } 

     } 

案例0擊中2次。正如你所看到的標籤在中繼器中。以下是一個標記:由於數據綁定的DOM更新之前完成

<asp:Repeater ID="rptTab" runat="server" OnItemDataBound="rptTab_ItemBound"> 
      <ItemTemplate> 
       <li id= "liTabTest" runat = "server"> 
        <a> 
         <sc:Link ID = "hlTabLink" Field = "scTabLink" runat ="server"></sc:Link> 
        </a> 
       </li> 
      </ItemTemplate> 
     </asp:Repeater> 

回答

1

聽起來既TabIndex的未填充的是,也許是。很容易成爲一系列事件和更新等問題。否則,TabIndex可能永遠不會被填充?

你檢查該屬性在後面的階段?

最後,是不是有可以掛接在所有的項目都必將觸發另一個事件?使用您當前的代碼,您必須將第n個項目硬編碼爲最後一個項目(樣本中的2個),稍後您添加另一個項目時很容易忘記。如果你能找到這樣一個事件,你可以通過一個索引循環來遍歷這些項目,並讓所有的項目都知道這個長度是多少,這意味着你不必硬編碼該值。

相關問題