C# 当前上下文中不存在子中继器

C# 当前上下文中不存在子中继器,c#,asp.net,C#,Asp.net,我在另一个中继器中有一个嵌套的中继器,如下所示: <table> <asp:Repeater ID="RepeaterOuter" runat="server"> <ItemTemplate> <tr> <td><asp:TextBox Text='<%# Eval("Author") %>' /></td> </tr>

我在另一个中继器中有一个嵌套的中继器,如下所示:

<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>

谢谢。

首先,我非常怀疑这个内部中继器在外部中继器数据绑定之前是否存在。所以,请确保您在正确的时间访问内部中继器

其次,模板中的控件在页面上不可见。要在模板中获取控件,需要使用
FindControl
。还请注意,
FindControl
仅适用于直接子级,因此您的代码应该如下所示:

var innerRepeater = RepeaterOuter.Items[0].FindControl("RepeaterInner") as Repeater;

首先,您不应该试图从代码中访问这些控件。您只需将数据绑定到显示给您的转发器即可。@Servy,谢谢您的帮助,但我无法理解,但找到了一种使用嵌套转发器的方法。。。你是说没有办法访问嵌套中继器吗?不,我是说你不应该这么做,不是说你不能。假设您已经在其模板中设置了所有绑定,您只需添加一个新属性即可正确绑定数据,而无需编写一个充满代码的屏幕来填充数据而无需绑定。这非常好!你是对的:我的内部中继器在外部中继器被数据绑定之前不存在。也许这是一种错误的做事方式,但它现在对我很有效。顺便说一句,我怎样才能知道
RepeaterOuter.Items[]
array中有多少元素?@MicroR,这不是一个数组,而是一个集合。并且它具有
Count
属性,因此
RepeaterOuter.Items.Count
var innerRepeater = RepeaterOuter.Items[0].FindControl("RepeaterInner") as Repeater;