5

我需要从按钮的 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" />

代码隐藏.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);
}

此代码只会输出“2”作为计数,那么如何在页脚模板中引用我的文本框?

4

3 回答 3

1

MSDN 文档中,项目只是一组基于您绑定到的 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;
  }
}    
于 2009-01-30T14:17:46.373 回答
1

您可以在中继器中找到控件。RepeaterItems这将为您提供转发器(集合)中的所有控件。现在您可以执行以下操作:

RepeaterItem footerItem=null;
foreach(Control cnt in Repeater1.Controls)
{
if(cnt.GetType() == typeof(RepeaterItem) && ((RepeaterItem)cnt).ItemType == ListItemType.Footer)
{
footerItem = cnt;
break;
}
}
于 2009-06-11T16:19:42.820 回答
0

页脚应该是中继器的最后一个子控件,因此您可以执行类似的操作。

RepeaterItem riFooter = Repeater1.Controls[Repeater1.Controls.Count - 1] as RepeaterItem;
if (riFooter != null && riFooter.ItemType == ListItemType.Footer) {
    TextBox TextBox1 = riFooter.FindControl("TextBox1") as TextBox;
    if (TextBox1 != null) {
        TextBox1.Text = "Test";
    }
}
于 2009-09-25T02:05:39.653 回答