0

1 つのリンクを持つ Sitecore.Web.UI.WebControls.Link として 2 つのタブがあります。ページが開いたら、最初のページに注目したいと思います。私はこのコードを書きましたが、0 番目のインデックスに 2 回しかヒットしていないようです。したがって、両方のタブを選択したアイテムとして取得しています。コードは次のとおりです。

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 回ヒットしています。ご覧のとおり、タブはリピーターにあります。そのためのマークアップは次のとおりです。

 <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>
4

1 に答える 1

1

おそらく dom が更新される前にデータバインディングが完了するため、TabIndex のいずれかがまだ入力されていないようです。イベントや更新のシーケンスなどで簡単に問題になる可能性があります。

後の段階でそのプロパティを確認しましたか?

最後に、すべてのアイテムがバインドされたときにトリガーされる、フックできる別のイベントはありませんか? 現在のコードでは、n 番目の項目を最後の項目 (サンプルでは 2) としてハードコーディングする必要があります。これは、後で別の項目を追加するときに忘れがちです。そのようなイベントを見つけることができれば、インデックス付きの for ループでアイテムをループすることができ、そこにあるすべてのアイテムが長さを知ることができます。つまり、その値をハードコーディングする必要はありません。

于 2012-07-21T03:38:25.517 に答える