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 Link 对象替换为 HyperLink。看来您在这里没有做任何保证使用 Sitecore 控制标准 ASP.NET 对象的事情。

于 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;

很难确切地说出发生了什么,但我猜没有一个 case 语句被击中,并且因为你没有默认案例,所以没有添加任何类。尝试将此添加到您的交换机,看看会发生什么:

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