【问题标题】:Can't access Ajax Accordion Pane's Content无法访问 Ajax Accordion Pane 的内容
【发布时间】:2015-09-25 07:00:19
【问题描述】:

我在如下窗格中使用AccordionHiddenField 和另一个Accordion

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

PostBack 上,我访问其选定的窗格:

AccordionPane pane = accFuncPerm.Panes[accFuncPerm.SelectedIndex];

但是,当我试图找到它的控件时,它失败了。

Accordion accPagPerm = (Accordion)pane.FindControl("accPagPerm");
pane = accPagPerm.Panes[int.Parse(txtAcc.Text)];
HiddenField hf = (HiddenField)pane.FindControl("hfID");

我发现的面板内容为空,hiddenfieldnull

有谁知道原因,可以给我解决办法吗?

【问题讨论】:

    标签: c# asp.net ajax accordion


    【解决方案1】:

    Accordion 在 Controls 中有两个 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");
    }
    

    您将需要检查空值以及数据类型是否符合预期,但这将帮助您入门。

    附带说明:您可以去掉controls 变量,但随后您需要计算内容AccordionContentPanel 的ID。它似乎遵循 _Pane__content 格式,其中 是 @987654327 的 id @ 拥有面板, 是面板在AccordionPanel 属性中的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多