0

我有一个手风琴嵌套在手风琴内。我不确定你甚至可以做到这一点,但你可以!有用。然而...

在内部手风琴中,我有一个中继器。当我尝试设置 RepeaterName.DataSource 时,我得到一个空引用异常。我试图通过使用 this.FindControl 来强制解决这个问题,但仍然没有乐趣。后面的代码只是没有看到嵌套 Accordion 中的中继器。

我很沮丧,但并不惊讶。

我真的不想“取消嵌套”这些。我拥有的是作者手风琴,然后在每个作者窗格中,我都有另一个他们作品的手风琴。

所以,我们有

作者1

  • 第1条

  • 第二条

作者2

  • 第1条

  • 第二条

  • 第三条

等等

编辑:在后面添加标记和代码

                        <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();
        }
4

1 回答 1

0

FindControl可能看不到 AccordionPane。您需要向下遍历顶级(父级)AccordionPane。

像这样的东西:

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

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

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

于 2013-06-06T21:57:25.970 回答