在中继器控制中找不到标签控制

The*_*mpp 1 c# asp.net repeater exception

我想TextLabel在后面的代码中使用带有ID的Label控件,但是这给了我以下异常Object reference not set to an instance of an object.异常是在代码隐藏文件的这行代码中:

  Label label = e.Item.FindControl("TextLabel") as Label;

  string text = label.Text;
Run Code Online (Sandbox Code Playgroud)

我在这里弄错了什么?如何在代码后面找到"TextLabel"控件?

aspx代码:

<asp:Repeater ID="UserPostRepeater" runat="server" OnItemDataBound="UserPostRepeater_ItemDataBound">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>

        <asp:Label ID="TextLabel" runat="server" Text="Label"></asp:Label>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

后台代码:

protected void UserPostRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    BlogProfileEntities blogProfile = new BlogProfileEntities();
    Label label = e.Item.FindControl("TextLabel") as Label;
    string text = label.Text;
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

使用时,ItemDataBound您需要检查转发器项目的类型 - e.Item.ItemType.

它必须是ListItemType.Item或者ListItemType.AlternatingItem- 这些是标签存在的模板.

protected void UserPostRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    BlogProfileEntities blogProfile = new BlogProfileEntities();

    if (e.Item.ItemType == ListItemType.Item || 
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
      Label label = e.Item.FindControl("TextLabel") as Label;
      string text = label.Text;
    }
}
Run Code Online (Sandbox Code Playgroud)