2

Sitecore と VS2010 (バージョン 4) を使用しています。ユーザーが移動するタブ インデックスに従って、コード ビハインドから属性を追加しています。

Link hlTabLink;
i = e.Item.DataItem as Item;
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";
                    hlTabLink.Attributes.Add("class", liContainerId);
                    break;
                case 1:
                    liContainerId = "tab-label TabbedPanelsTabSelected";
                    hlTabLink.Attributes.Add("class", liContainerId);
                    break;
                case 2:
                    liContainerId = "tab-label last";
                    hlTabLink.Attributes.Add("class", liContainerId);
                    break;
            }

これは、.ascx コントロールのマークアップです。

<div class="tab-panels" id="TabbedPanels1">
    <ul id="Tab-labels">
       <asp:Repeater ID="rptTab" runat="server" OnItemDataBound="rptTab_ItemBound">
            <ItemTemplate>
                <li>
                    <sc:Link ID = "hlTabLink" Field = "scTabLink" runat ="server"></sc:Link>
                </li>
            </ItemTemplate>
       </asp:Repeater>
    </ul>

レンダリング後のマークアップは次のようになります。

<div class="tab-panels" id="TabbedPanels1">
    <ul id="Tab-labels">

                <li>
                    Overview
                </li>

                <li>
                    Why Me
                </li>

    </ul>

ここで何が間違っていますか?

4

3 に答える 3

3

あなたは何も悪いことをしていないと思います...それは、Sitecore.Web.UI.WebControls.Link オブジェクトが余分な属性をレンダリングすることを気にしていないだけです。Reflector を使用してコードを確認し、確認してください。

Sitecore リンク オブジェクトを HyperLink に置き換えます。ここでは、標準の ASP.NET オブジェクトに対して Sitecore コントロールを使用することを保証するようなことはしていないようです。

于 2012-07-18T21:05:56.630 に答える
1

Sitecore 名前空間では、Link は ASP:Hyperlink コントロールの拡張です。CssClass を使用して、アンカー タグの属性を設定します。

hlTabLink.CssClass = liContainerId;
于 2012-07-18T21:28:08.280 に答える
0

何から返ってくるか分からないまま

hlTabLink = e.Item.FindControl("hlTabLink") as Link;

何が起こっているのかを正確に言うのは難しいですが、ケースステートメントのどれもヒットしておらず、デフォルトのケースがないため、クラスが追加されていないと推測しています. これをスイッチに追加してみて、何が起こるか見てみましょう:

         default:
                    liContainerId = "tab-label TabbedPanelsTabSelected";
                    hlTabLink.Attributes.Add("class", liContainerId);
                    break;
于 2012-07-18T21:07:01.200 に答える