Asp.net 嵌套中继器和Gridview设置中的可折叠PanelExtender不';t函数

Asp.net 嵌套中继器和Gridview设置中的可折叠PanelExtender不';t函数,asp.net,gridview,nested,repeater,collapsiblepanelextender,Asp.net,Gridview,Nested,Repeater,Collapsiblepanelextender,我有一个使用三级嵌套的设置:一个中继器,其中的项目使用可折叠的PanelExtender(可以工作),每个项目都包含一个GridView。然后,其中每一个都包含另一个GridView,该GridView由另一个可折叠PanelExtender控制。只有当我将clientState设置为True时,这些内部可折叠面板才会有效地显示展开或折叠状态。然而,它们并没有像预期的那样有效地扩张或崩溃。一切都是动态的 这是标记 <asp:Repeater ID="cat_repeater" runat=

我有一个使用三级嵌套的设置:一个中继器,其中的项目使用可折叠的PanelExtender(可以工作),每个项目都包含一个GridView。然后,其中每一个都包含另一个GridView,该GridView由另一个可折叠PanelExtender控制。只有当我将clientState设置为True时,这些内部可折叠面板才会有效地显示展开或折叠状态。然而,它们并没有像预期的那样有效地扩张或崩溃。一切都是动态的

这是标记

<asp:Repeater ID="cat_repeater" runat="server">
  <ItemTemplate>
    <asp:CollapsiblePanelExtender id="cat_cpExt" runat="server" TargetControlID="cat_pnl" CollapsedSize="0" Collapsed="false" CollapsedImage="collapsed.png" ExpandedImage="expanded.png" ExpandControlID="cpControl_pnl" CollapseControlID="cpControl_pnl" TextLabelID="cpControl_lbl" ImageControlID="cpControl_img" CollapsedText='<%#configCPText(eval("Title"), False)%>' ExpandedText='<%#configCPText(eval("Title"), True) %>' />
    <asp:Panel ID="cpControl_pnl" runat="server" Visible='<%#itemVisible(eval("ID"), "Recipients", "CategoryID") %>' CssClass="CPanelStyle">
      <asp:Image ID="cpControl_img" runat="server" ImageUrl="expanded.png" />
      <asp:Label ID="cpControl_lbl" runat="server" Text='<%#configCPText(eval("Title"), True) %>' CssClass="CPanelText" />
    </asp:Panel>
    <asp:Panel ID="cat_pnl" runat="server">
      <asp:GridView ID="recipients_gv" runat="server" CssClass="GVStyle" HeaderStyle-CssClass="GVHeaderStyle" RowStyle-CssClass="GVItemStyle" AutoGenerateColumns="false" GridLines="none" AllowPaging="false">
        <Columns>
          <asp:TemplateField HeaderText="Name" SortExpression="Last Name" ItemStyle-CssClass="GVNameStyle">
            <ItemTemplate>
              <asp:Literal id="name_lit" runat="server" text='<%#formatNameText(eval("FirstName"), eval("LastName")) %>' />
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Gifts" ItemStyle-Width="500px">
            <ItemTemplate>
              <asp:CollapsiblePanelExtender id="gifts_cpExt" runat="server" TargetControlID="gifts_pnl" CollapsedSize="0" Collapsed="true" CollapsedImage="collapsed.png" ExpandedImage="expanded.png" ExpandControlID="cpControl_pnl2" CollapseControlID="cpControl_pnl2" TextLabelID="cpControl_lbl2" ImageControlID="cpControl_img2" CollapsedText='<%#configGiftsCPText(eval("ID"), True)%>' ExpandedText='<%#configGiftsCPText(eval("ID"), False) %>' />
              <asp:Panel ID="cpControl_pnl2" runat="server" Visible='<%#itemVisible(eval("ID"), "Gifts", "RecipientID") %>'>
                <asp:Image ID="cpControl_img2" runat="server" ImageUrl="collapsed.png" />
                <asp:Label ID="cpControl_lbl2" runat="server" Text='<%#configGiftsCPText(eval("ID"), False) %>' />
              </asp:Panel>
              <asp:Panel ID="gifts_pnl" runat="server">
                <asp:GridView ID="gifts_gv" runat="server" DataKeyNames="ID" RowStyle-CssClass="GVInnerItemStyle" HeaderStyle-CssClass="GVInnerHeaderStyle" Gridlines="None" AutoGenerateColumns="false" AllowPaging="false" Width="475px">
                  <Columns>
                    <asp:TemplateField ItemStyle-CssClass="GVInnerButtonItemStyle" HeaderText="Description">
                      <ItemTemplate>
                        <asp:LinkButton ID="gift_lBtn" runat="server" Text='<%#eval("Description") %>' CommandName="Select" />
                      </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Complete" ItemStyle-Width="50px">
                      <ItemTemplate>
                        <asp:CheckBox ID="giftComplete_cbx" runat="server" Checked='<%#eval("Complete") %>' />
                      </ItemTemplate>
                    </asp:TemplateField>
                  </Columns>
                </asp:GridView>
              </asp:Panel>
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
      </asp:GridView>
    </asp:Panel>
    <br />
  </ItemTemplate>
</asp:Repeater>
我已经成功地在2级嵌套GridView设置中使用了CollapsablePanelExtender,以前没有问题,而且不必设置clientState。但是,以前在使用可折叠PanelExtender和中继器时,我必须指定clientState


有人对这些扩展器为什么不能在这个3级嵌套设置中工作有任何意见吗?

看起来需要它的原因是因为它需要回发才能使所有逻辑正常工作:

if (this.SupportsClientState) {
  ScriptManager.RegisterHiddenField(this, this.ClientStateFieldID, this.SaveClientState());
  this.Page.RegisterRequiresPostBack(this);
}
这来自AjaxControlToolkit空间中的公共类ScriptControlBase

你在用UpdatePanel包装这个吗?是否会导致回发使用中继器中的CPE?我尝试在中继器中进行CPE已经有一段时间了,现在我还没有准备好检查代码并构建一个


有什么原因不能完全使用客户端的东西,而只是使用javascript来扩展/折叠它们?当这些东西被扩展时,您是否在服务器端动态加载数据?

您知道它当前是否正在中继器CPE上进行回发吗?目前,我还没有将任何数据放在UpdatePanel中(我计划至少将内部GridView封装在一个中,以便进一步添加功能)在中继器中使用CPE不会导致回发,但CPE能够感知回发。我的所有数据——正如我在代码中所示——都是利用CPE动态加载到控件中的。我可以尝试使用CPE的客户端方法实现JavaScript方法。明天我会尝试一下,如果你不这么做,那就看看如何使用jQuery并切换这些id,但这可能会更棘手。如果你想在这里打电话给我,我可以看看是否可以在网上和你见面(比如在聊天室?)。我是美国中央时间(格林尼治标准时间-6是吗?)。Lemme知道,很高兴能在我可以的地方帮助调试。事实上,我不相信我能利用CPE的客户端方法或jQuery,因为CPE是在绑定外部GridView时动态生成的;可以生成任意数量的文件。我很乐意和你一起调试;不过,我是东部标准时间。事实上,我确实想让你尝试用其他东西替换CPE功能。让它一直持续到明天;-)
if (this.SupportsClientState) {
  ScriptManager.RegisterHiddenField(this, this.ClientStateFieldID, this.SaveClientState());
  this.Page.RegisterRequiresPostBack(this);
}