2016-11-02 7 views
0

私はこのようになりますユーザーコントロールを持っている:asp.netでAccordion内にUserControlを挿入するにはどうすればよいですか?

<%@ 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> 

内部のアコーディオンでページを持っていると述べたと、私はペインタグ内にユーザーコントロールを挿入しようとしたが、いページがレンダリングされず、代わりにエラーが発生します。

パーサーエラーメッセージ:AjaxControlToolkit.AccordionPaneCollectionには、 'AjaxControlToolkit.AccordionPane'タイプのアイテムが必要です。 'uc1:ProfileGroupComponent'のタイプは 'ASP.controls_profilegroupcomponent_ascx'です。

背後にあるアイデアは、複数のペインを動的に追加することですが、コントロールを編集してルック・アンド・フィールを変更できる一貫したUIが考えられます。それを行うための安全な方法はありますか?

答えて

0

エラーメッセージは、AccordionPanesがカスタムユーザーコントロールではなく、AccordionPaneのアイテムのコレクションを必要としていることを示しています。

この問題を解決するには、いくつかの方法があります。

  1. ASCXコントロールの一部にアコーディオンコントロールを追加します。 このアプローチの良い点は、Accordionの制御自体を複数の部分に分割する必要がなくなったことです。これはまず最初に行うのがやや難しいと思います。その後、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> 
  • コードビハインドでAccordionPaneを追加動的検討。より多くのコードを書くことが期待されるため、これは確かにもう少し難しいことです。しかし、Accordionをどのようにページ上にレンダリングするかを決定する比較的複雑なロジックを持っているなら、より多くのパワーが得られます。
  • あなたがこの技術の詳細については、このリンクを見てとることができ


    https://www.asp.net/web-forms/overview/ajax-control-toolkit/accordion/dynamically-adding-an-accordion-pane-cs

    +0

    実は私の回避策は、第三と混合あなたの第一のアプローチで、私は2番目を試してみてどうかをお知らせしますできます。 – Heinrich

    +0

    私は、プログラム(HeaderCtrl)をプログラムで挿入することで、2番目の推奨策に取り組んでいますが、最終的にHeaderCtrl内のすべての子コントロールはイベントをトリガーしません。イベントを購読しても、ボタンを使用する場合にクリックしてください – Heinrich

    関連する問題