我在另一个转发器里面有一个嵌套的转发器,如下所示:
<table>
<asp:Repeater ID="RepeaterOuter" runat="server">
<ItemTemplate>
<tr>
<td><asp:TextBox Text='<%# Eval("Author") %>' /></td>
</tr>
<asp:Repeater ID="RepeaterInner" runat="server">
<ItemTemplate>
<tr>
<td><asp:TextBox Text='<%# Eval("Book") %>' /></td>
<td><asp:TextBox Text='<%# Eval("PublishDate") %>' /></td>
<td><asp:TextBox Text='<%# Eval("Pages") %>' /></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
</table>
但是,当我尝试从我的代码隐藏文件中访问子转发器RepeaterInner时,它表示它在当前上下文中不存在。然而,父转发器RepeaterOuter确实如此。
我正在尝试设置一个循环,在子转发器中遍历我的TextBox,但它不允许我访问它:
//does not work
foreach (RepeaterItem item in RepeaterInner.Items)
{
txtBook= (TextBox)item.FindControl("Book");
txtPublishDate = (TextBox)item.FindControl("PublishDate");
txtPages = (TextBox)item.FindControl("Pages");
// do something....
}
谢谢。
答案 0 :(得分:3)
首先,我非常怀疑这个内部转发器在外部转发器数据绑定之前是否存在。因此,请确保您在正确的时间访问内部中继器。
第二,页面上看不到模板中的控件。要获得模板中的控件,您需要使用FindControl
。另请注意,FindControl
仅适用于直接子项,因此您的代码应如下所示:
var innerRepeater = RepeaterOuter.Items[0].FindControl("RepeaterInner") as Repeater;