在当前上下文中不存在子转发器

时间:2014-10-03 15:44:14

标签: c# asp.net

我在另一个转发器里面有一个嵌套的转发器,如下所示:

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

}

谢谢。

1 个答案:

答案 0 :(得分:3)

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

第二,页面上看不到模板中的控件。要获得模板中的控件,您需要使用FindControl。另请注意,FindControl仅适用于直接子项,因此您的代码应如下所示:

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