中继器控制中的超链接问题

时间:2009-12-11 18:18:45

标签: asp.net repeater

<asp:Repeater ID="Repeater1" runat="server">

   <ItemTemplate>
      <li class="closed" >
           <asp:HyperLink runat="server" CssClass="toggler off" 
                ImageUrl="/_layouts/images/NEXT.GIF" 
                Text="<%#Container.DataItem%>" ID="HyperLink1">
           </asp:HyperLink>
      </li>
   </ItemTemplate>

 </asp:Repeater>

我想从arraylist

中获取超链接中的文本

在我的ascx代码中

我试图通过显示错误

来做到这一点
 HyperLink hypl = (HyperLink)Repeater1.FindControl("HyperLink1");
 hypl.Text = ar.ToString();
 hypl.NavigateUrl = "http//www.yahoo.com";

任何人都知道如何解决此问题

1 个答案:

答案 0 :(得分:3)

使用转发器控件,您无法使用FindControl按名称查找超链接,因为可以有多个(这是一个模板,它会呈现0到n次)。

您需要多次为超链接分配值,每次绑定一个项目。这是转发器的ItemDataBound事件的工作。尝试这样的事情:

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound">
    <ItemTemplate>
      <li class="closed" >
       <asp:HyperLink runat="server" CssClass="toggler off" 
            ImageUrl="/_layouts/images/NEXT.GIF" 
            Text="<%#Container.DataItem%>" ID="HyperLink1">
       </asp:HyperLink>
      </li>
    </ItemTemplate>
</asp:Repeater>

然后你需要处理这样的事件:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    HyperLink hypl = (HyperLink)e.Item.FindControl("HyperLink1");
    hypl.Text = ar.ToString();
    hypl.NavigateUrl = "http//www.yahoo.com";
}