在转发器中找到当前元素

时间:2010-09-21 17:12:22

标签: c#

如何在代码中获取当前的MainNavigationMenu hyprelink并检查当前菜单是否单击,然后我将更改他的默认CSS。

我尝试使用此代码,但始终为null

HyperLink mainNavigationMenu = siteMapAsBulletedList.FindControl("MainNavigationMenu") as HyperLink;

完整转发器代码:

<asp:Repeater runat="server" ID="siteMapAsBulletedList" DataSourceID="smdsMenu">
                        <HeaderTemplate>
                            <li><asp:HyperLink ID="MainNavigationMenu" runat="server" NavigateUrl='<%#SiteMap.RootNode.Url%>'
                                Text='<%#SiteMap.RootNode.Title%>'></asp:HyperLink></li>                        
                        </HeaderTemplate>
                        <ItemTemplate>
                            <li><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#Eval("Url")%>' Text='<%#Eval("Title")%>'></asp:HyperLink></li>
                        </ItemTemplate>
                        </asp:Repeater>

2 个答案:

答案 0 :(得分:0)

转发器有一个项目集合。每个Item都是RepeaterItem,它具有ItemType属性。对于标题项,此值将为“ListItemType.Header”。因此,您希望对该特定转发器项执行.FindControl(),而不是整个Repeater本身。

答案 1 :(得分:0)

您在验证您正在查看哪种类型的转发器项目吗?

将ItemDataBound附加到转发器并执行以下操作:

private void rptPanier_ItemDataBound(Object sender , RepeaterItemEventArgs e) 
{
    if (e.Item.ItemType == ListItemType.Header)
    {
      var myItem = (Hyperlink)e.Item.FindControl("YourControlName");
    }
}

然后你会有一个参考,你可以做任何你想做的事! 请注意,当转发器创建标头时,可以在repeateritemeventargs中找到的ItemData项始终为空。

希望这有帮助!