2012-07-20 66 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个),稍后您添加另一个项目时很容易忘记。如果你能找到这样一个事件,你可以通过一个索引循环来遍历这些项目,并让所有的项目都知道这个长度是多少,这意味着你不必硬编码该值。

相关问题