0

我有一个看起来像这样的用户控件:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProfileGroupComponent.ascx.cs" Inherits="Reports.Controls.ProfileGroupComponent" %>

<ajaxToolkit:AccordionPane ID="accordionPane" runat="server">
    <Header>
        <asp:Table ID="Table1" runat="server">
            <asp:TableHeaderRow  runat="server">
                <asp:TableHeaderCell>
                    <asp:Label ID="lblHeader" runat="server">
                </asp:Label>
                </asp:TableHeaderCell>
                <asp:TableHeaderCell>
                    <asp:Label ID="Label3" runat="server" Text="Frecuency: "></asp:Label>
                    <asp:Label ID="lblFrecuency" runat="server"></asp:Label>
                </asp:TableHeaderCell>
                <asp:TableHeaderCell>
                    <asp:Label ID="Label7" runat="server" Text="Nxt Invoice Dt: "></asp:Label>
                    <asp:Label ID="lblNxtInvoiceDt" runat="server"></asp:Label>
                </asp:TableHeaderCell>
                <asp:TableHeaderCell>
                   <asp:Label ID="Label9" runat="server" Text="Not Consolidated:"></asp:Label>
                    <ajaxToolkit:ComboBox ID="cmbNotConsolidated" runat="server" AutoCompleteMode="Suggest"></ajaxToolkit:ComboBox>
                </asp:TableHeaderCell>
                <asp:TableHeaderCell>
                     <asp:Button ID="btnPayorDetails" runat="server" Text="Payor Details" OnClick="btnPayorDetails_OnClick"/>
                </asp:TableHeaderCell>
            </asp:TableHeaderRow>
        </asp:Table>
    </Header>
    <Content>
        <asp:BulletedList ID="bltListDeitals" runat="server">

        </asp:BulletedList>
    </Content>
</ajaxToolkit:AccordionPane>

话虽如此,我有一个里面有手风琴的页面

<ajaxToolkit:Accordion ID="MyAccordion" runat="server" SelectedIndex="0" HeaderCssClass="accordionHeader"
                    HeaderSelectedCssClass="accordionHeaderSelected" ContentCssClass="accordionContent"
                    FadeTransitions="false" FramesPerSecond="40" TransitionDuration="250" AutoSize="None"
                    RequireOpenedPane="false" SuppressHeaderPostbacks="true" Width="1880">
                    <Panes>
                        <uc1:ProfileGroupComponent runat="server" ID="ProfileGroupComponent" />
                    </Panes>
                </ajaxToolkit:Accordion>

我试图在 Panes 标记内插入 UserControl,但页面没有呈现它,而是出现错误:

解析器错误消息:AjaxControlToolkit.AccordionPaneCollection 必须具有“AjaxControlToolkit.AccordionPane”类型的项目。“uc1:ProfileGroupComponent”的类型为“ASP.controls_profilegroupcomponent_ascx”。

背后的想法是动态添加多个窗格,但使用一致的 UI,我可以在其中编辑控件并更改外观和感觉。有什么安全的方法吗?

4

1 回答 1

0

错误消息表明AccordionPanes需要一个项目集合AccordionPane,而不是您的自定义用户控件。

有几种可能的方法可以解决此问题。

  1. 使您的手风琴控件成为您的 ASCX 控件的一部分。 这种方法的一个好处是您不再需要将Accordion控制本身分解为多个部分,我认为首先这样做有点尴尬。然后您可以在您自己的 ASCX 控件中使用 Accordion。

  2. 更改 ASPX 页面和 ASCX 控件的标记代码。通过这样做,您需要将AccordionPane项目模板移动到您的 ASPX 页面,并使您的 ASCX 仅作为内容控件。如果需要在应用程序的其他地方重用它,您还可以尝试创建标题内容 ASCX 控件。所以最后,它归结为这样的事情。

例子:

<ajaxToolkit:Accordion ID="MyAccordion" runat="server" SelectedIndex="0" HeaderCssClass="accordionHeader" HeaderSelectedCssClass="accordionHeaderSelected" ContentCssClass="accordionContent" FadeTransitions="false" FramesPerSecond="40" TransitionDuration="250" AutoSize="None" RequireOpenedPane="false" SuppressHeaderPostbacks="true" Width="1880"> 
     <Panes>
          <asp:AccordionPane ID="AccordionPane1" runat="server">
             <Header><uc1:HeaderCtrl runat="server" ID="myHeader" /></Header>
             <Content><uc1:ContentCtrl runat="server" ID="myContent" />
             </Content>
          </asp:AccordionPane>   
     </Panes>
</ajaxToolkit:Accordion>
  1. 考虑在后面的代码中动态添加 AccordionPane。这肯定会更具挑战性,因为您需要编写更多代码。但是,如果您有相对复杂的逻辑来确定 Accordion 应如何在页面上呈现,那么您将获得更大的权力。

您可以查看此链接以了解有关此技术的更多详细信息:
https ://www.asp.net/web-forms/overview/ajax-control-toolkit/accordion/dynamically-adding-an-accordion-pane-cs

于 2016-11-03T02:45:01.077 回答