为什么页脚项目不包含在Repeater.Items中?

Esp*_*spo 5 asp.net repeater footer

我需要从按钮的OnClick事件中的FooterTemplate内的文本框中获取值.我的第一个想法是遍历我的转发器上的items-property,但正如您在此示例中所看到的,它只包含实际的数据绑定项,而不是页脚项.

ASPX:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        Item<br />
    </ItemTemplate>
    <FooterTemplate>
        Footer<br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </FooterTemplate>
</asp:Repeater>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
Run Code Online (Sandbox Code Playgroud)

代码behind.cs:

protected void Page_Load(object sender, EventArgs e)
{
    ListItemCollection items = new ListItemCollection();
    items.Add("value1");
    items.Add("value2");
    Repeater1.DataSource = items;
    Repeater1.DataBind();
}

protected void Button1_Click(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine(Repeater1.Items.Count);
}
Run Code Online (Sandbox Code Playgroud)

此代码只输出"2"作为计数,那么如何在footertemplate中引用我的文本框?

Ray*_*sen 1

MSDN 文档来看,Items 只是一组基于您绑定到的 DataSource 的 RepeaterItems,并且不包含 Header 或 FooterTemplates 中的项目。

如果您想引用文本框,您可以从中继器获取 ItemDataBound 事件的引用,您可以在其中测试页脚。

例如

private void Repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{

  if (e.Item.ItemType == ListItemType.Footer) 
  {
    TextBox textBox = e.Item.FindControl("TextBox1") as TextBox;
  }
}    
Run Code Online (Sandbox Code Playgroud)