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");
}
您需要检查空值以及数据类型是否符合预期,但这将帮助您开始
另一方面:您可以去掉控件
变量,但随后需要计算内容的IDAccordionContentPanel
。它似乎遵循了“窗格内容”的格式,其中是拥有面板的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");
}