我有一个如下所示的用户控件:
<%@ 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,我可以在其中编辑控件并更改外观。有没有安全的方法呢?
答案 0 :(得分:0)
错误消息表明AccordionPanes
期望收集AccordionPane
项,而不是您的自定义用户控件。
有几种方法可以解决此问题。
让您的手风琴控制器成为ASCX控件的一部分。
这种方法的一个好处是你不再需要将Accordion
控制自己分成多个部分,我认为这首先是有点尴尬。然后,您可以在自己的ASCX控件内使用Accordion。
更改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>
您可以查看此链接以获取有关此技术的更多详细信息:
https://www.asp.net/web-forms/overview/ajax-control-toolkit/accordion/dynamically-adding-an-accordion-pane-cs