C# Can';t访问Ajax手风琴窗格';内容

C# Can';t访问Ajax手风琴窗格';内容,c#,asp.net,ajax,accordion,C#,Asp.net,Ajax,Accordion,我正在使用一个手风琴和一个隐藏字段,在它的窗格中使用另一个手风琴,如下所示: <asp:Accordion ID="accFuncPerm" runat="server" HeaderCssClass="accheaderfun" ContentCssClass="acccontfun" OnItemDataBound="accFuncPerm_ItemDataBound" RequireOpenedPane="false" SelectedIndex="-1">

我正在使用一个
手风琴
和一个
隐藏字段
,在它的窗格中使用另一个
手风琴
,如下所示:

<asp:Accordion ID="accFuncPerm" runat="server" HeaderCssClass="accheaderfun"
    ContentCssClass="acccontfun" OnItemDataBound="accFuncPerm_ItemDataBound"
    RequireOpenedPane="false" SelectedIndex="-1">
    <headertemplate>
            <%#DataBinder.Eval(Container.DataItem, "nmFuncionalidade")%>
        </headertemplate>
    <contenttemplate>
            <asp:HiddenField ID="hfIDF" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "idFuncionalidade")%>' />
            <asp:Accordion ID="accPagPerm" runat="server" HeaderCssClass="accheader" ContentCssClass="acccont"
                RequireOpenedPane="false" SelectedIndex="-1" HeaderSelectedCssClass="accheadersel" 
                OnItemCommand="accPagPerm_OnItemCommand" SuppressHeaderPostbacks="false" OnItemDataBound="accPagPerm_ItemDataBound">
                <HeaderTemplate>
                    <asp:LinkButton runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "nmPagina")%>'  
                        CommandName="Select" CommandArgument='<%#DataBinder.Eval(Container.DataItem, "idPagina")%>' Width="100%" />                                    
                </HeaderTemplate>
                <ContentTemplate>
                    <asp:HiddenField ID="hfID" runat="server" Value='<%#DataBinder.Eval(Container.DataItem, "idPagina")%>' />
                    <asp:Table ID="tblGrupoAcaoPagina" runat="server" CssClass="gv" GridLines="Both">
                        <asp:TableHeaderRow ID="tblHeader" runat="server">
                        </asp:TableHeaderRow>
                    </asp:Table>
                </ContentTemplate>
            </asp:Accordion>
        </contenttemplate>
</asp:Accordion>
我找到的面板包含空内容,hiddenfield为null


有人知道原因吗?请给我一个解决方案。

Accordion在控件中有两个
AccordionContentPanel
实例,一个用于标题,另一个用于内容。内容
AccordionContentPanel
包含您要查找的值:

protected void accFuncPerm_ItemCommand(object sender, CommandEventArgs e)
{
    AccordionContentPanel acpContent;
    AccordionPane aPane = accFuncPerm.Panes[accFuncPerm.SelectedIndex];
    Control[] controls;

    //Find accPagPerm
    controls = new Control[aPane.Controls.Count];
    aPane.Controls.CopyTo(controls, 0);
    acpContent = (AccordionContentPanel)controls.Single(c => c.FindControl("accPagPerm") != null);
    Accordion accPagPerm = (Accordion)acpContent.FindControl("accPagPerm");

    //Find hfID
    aPane = accPagPerm.Panes[int.Parse(txtAcc.Text)];
    controls = new Control[aPane.Controls.Count];
    aPane.Controls.CopyTo(controls, 0);
    acpContent = (AccordionContentPanel)controls.Single(c => c.FindControl("hfID") != null);
    HiddenField hf = (HiddenField)acpContent.FindControl("hfID");
}
您需要检查空值以及数据类型是否符合预期,但这将帮助您开始

另一方面:您可以去掉
控件
变量,但随后需要计算内容的ID
AccordionContentPanel
。它似乎遵循了“窗格内容”的格式,其中是拥有面板的
Accordion
的id,是
Accordion
panel
属性中面板的索引

protected void accFuncPerm_ItemCommand(object sender, CommandEventArgs e)
{
    AccordionContentPanel acpContent;
    AccordionPane aPane = accFuncPerm.Panes[accFuncPerm.SelectedIndex];
    Control[] controls;

    //Find accPagPerm
    controls = new Control[aPane.Controls.Count];
    aPane.Controls.CopyTo(controls, 0);
    acpContent = (AccordionContentPanel)controls.Single(c => c.FindControl("accPagPerm") != null);
    Accordion accPagPerm = (Accordion)acpContent.FindControl("accPagPerm");

    //Find hfID
    aPane = accPagPerm.Panes[int.Parse(txtAcc.Text)];
    controls = new Control[aPane.Controls.Count];
    aPane.Controls.CopyTo(controls, 0);
    acpContent = (AccordionContentPanel)controls.Single(c => c.FindControl("hfID") != null);
    HiddenField hf = (HiddenField)acpContent.FindControl("hfID");
}