1

TextLabelコード ビハインドでID を使用してラベル コントロールを取得したいのですが、これにより次Object reference not set to an instance of an object.の例外が発生します。例外は、コード ビハインド ファイルのこのコード行にあります。

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

  string text = label.Text;

私がここで犯した間違いは何ですか?コードビハインドで「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>

コード ビハインド:

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

3 に答える 3

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;
    }
}
于 2013-03-10T13:38:26.073 に答える
1

すべてのアイテム に対して呼び出されるため、正しいインをチェックする必要がありItemTypeます。ItemDataBoundHeader

protected void UserPostRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
     // This event is raised for the header, the footer, separators, and items.
      // Execute the following logic for Items and Alternating Items
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      {
         Label label = e.Item.FindControl("TextLabel") as Label;
         string text = label.Text;
      }
}
于 2013-03-10T13:39:39.653 に答える
1

どのタイプかを指定する必要がありますItemType。これはあなたの場合に機能します:

protected void UserPostRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)  // Add this
    {
     Label label = e.Item.FindControl("TextLabel") as Label;
     string text = label.Text;
    }
}
于 2013-03-10T13:46:10.583 に答える