我正在使用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>
我在这里做错了什么?
答案 0 :(得分:3)
我怀疑你没有做错任何事......只是Sitecore.Web.UI.WebControls.Link对象没有费心去渲染你的额外属性。使用Reflector确认一下代码。
用HyperLink替换Sitecore Link对象。看来你在这里没做任何保证使用Sitecore控件而不是标准ASP.NET对象。
答案 1 :(得分:1)
在Sitecore命名空间中,Link是ASP:Hyperlink控件的扩展。使用CssClass 设置锚标记的属性:
hlTabLink.CssClass = liContainerId;
答案 2 :(得分:0)
不知道从
返回的内容hlTabLink = e.Item.FindControl("hlTabLink") as Link;
很难确切地说出发生了什么,但我猜测没有任何案例陈述正在发生,因为你没有默认案例,所以没有增加任何类。尝试将此添加到您的交换机,看看会发生什么:
default:
liContainerId = "tab-label TabbedPanelsTabSelected";
hlTabLink.Attributes.Add("class", liContainerId);
break;