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このアプローチの良い点の 1 つは、コントロール自体を複数の部分に分割する 必要がなくなったことです。その後、独自の ASCX コントロール内でアコーディオンを使用できます。

  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 に答える