无法在嵌套的Accordion中“找到”Repeater

时间:2013-06-06 21:50:03

标签: c# asp.net ajaxcontroltoolkit

我有一个手风琴嵌入手风琴。我不确定你能做到这一点,但你可以!有用。然而...

在内置的手风琴中,我有一个转发器。当我尝试设置RepeaterName.DataSource时,我得到一个空引用异常。我试图通过使用this.FindControl强制解决问题,但仍然没有快乐。正好背后的代码没有在嵌套的Accordion中看到Repeater。

我很沮丧,但并不感到惊讶。

我真的不想“解开”这些。我所拥有的是作者手风琴,然后在每个作者窗格内我都有另外一部手风琴。

所以,我们有

作者1

  • 第1条

  • 第2条

Author2

  • 第1条

  • 第2条

  • 第3条

等。

编辑:添加标记和代码

                        <AjaxToolkit:AccordionPane runat="server" ID="JohnBunyanPane">
                        <Header>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;John Bunyan</Header>
                        <Content>                            
                        <AjaxToolkit:Accordion ID="JohnBunyanInternalAccordion" runat="server"
                            SelectedIndex="-1"
                            CssClass="accordion"
                            HeaderCssClass="accordionHeader"
                            HeaderSelectedCssClass="accordionHeaderSelected"
                            ContentCssClass="accordionContent"
                            AutoSize="None"
                            FadeTransitions="true"
                            TransitionDuration="250"
                            FramesPerSecond="40"
                            RequireOpenedPane="false"
                            SuppressHeaderPostbacks="true">
                            <Panes>
                                <AjaxToolkit:AccordionPane runat="server" ID="GraceAboundingPane">
                                    <Header>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Grace Abounding</Header>
                                    <Content>
                                        <div style="overflow-y:scroll;height:450px"> 
                                        <asp:UpdatePanel ID="GraceAboundingUpdatePanel" runat="server">
                                            <ContentTemplate>
                                                <asp:Repeater ID="GraceAboundingRepeater" runat="server">
                                                    <ItemTemplate>
                                                        <br />
                                                        <span>
                                                        <asp:Label ID="GraceAboundingBody" runat="server" Width="100%"  Text='<%# Eval("Body")%>'></asp:Label>
                                                        </span>
                                                        <br />
                                                        <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/separator.jpg" />
                                                        <br /><br />
                                                    </ItemTemplate> 
                                                </asp:Repeater>
                                            </ContentTemplate>
                                        </asp:UpdatePanel>
                                        </div>
                                    </Content>
                                </AjaxToolkit:AccordionPane>
                            </Panes>
                        </AjaxToolkit:Accordion>
                        </Content>
                    </AjaxToolkit:AccordionPane>

以下是填充它的电话:

            try
        {
            myDataAdapter.Fill(myDataSet);
            DataTable myDataTable = myDataSet.Tables[0];

            var childAccordionPane = (AccordionPane)this.FindControl("JohnBunyanPane");
            var repeater = (Repeater)childAccordionPane.FindControl("GraceAboundingRepeater");
            //Repeater myRepeater = (Repeater)childAccordionPane.FindControl("GraceAboundingRepeater");
            //GraceAboundingRepeater.DataSource = myDataTable;
            //GraceAboundingRepeater.DataBind();

            repeater.DataSource = myDataTable;
            repeater.DataBind();
        }

1 个答案:

答案 0 :(得分:0)

您的FindControl可能无法看到AccordionPane。您需要遍历顶级(父级)AccordionPane。

这样的事情:

var childAccordionPane = (AccordionPane)parentAccordionPane.FindControl("childAccordionPaneId");

var repeater = (Repeater)childAccordionPane.FindControl("repeaterId");

如果给出标记以验证代表每个控件ID的字符串是否正确,我们可以使其编译和工作。