1

アコーディオン ペインのコンテンツ データソースを遅延ロードしようとしています。つまり、ペインが開かれると、データソースがバインドされます。if (source == null) LoadMe();ロジックを起動するために使用できるイベントが見つかりません。

私は少なくとも百人の人々が以前にこれを行ったことを知っています. どんなアイデアでも役に立ちます。ティア

4

1 に答える 1

0

わかりました。私はそれに完全に満足していませんが、これは私が得たものです:

各ヘッダーには、領域全体を埋めるようにサイズを変更したリンク ボタンがあり、基本的にその領域をクリック可能にしています。

<ajaxToolkit:AccordionPane ID="acpInReview" runat="server">
    <Header>
        <asp:LinkButton runat="server" Width="100%" Height="25" CssClass="SectionLinkButtons" CommandName="LoadInReview">In Review</asp:LinkButton>
    </Header>

ご覧のとおり、関連付けられたコマンドがあります。親アコーディオンでは、テンプレート内でコマンドが検出されたときに起動するイベント ハンドラーを設定します。

<ajaxToolkit:Accordion runat="server" ID="accMainNav" HeaderCssClass="AccordionSection"
                       CssClass="AccordionMainNav" ContentCssClass="AccordionContent"
                       RequireOpenedPane="False" SelectedIndex="-1"
                       OnItemCommand="accMainNav_OnItemCommand" ClientIDMode="Static">
    <Panes>
        ... 

次に、コード ビハインドで、ハンドラーがコマンドを読み取り、それを実行します。

protected void accMainNav_OnItemCommand(object sender, CommandEventArgs e)
{
    switch(e.CommandName)
    {
        case "LoadAwaitingControllerApproval":
            LoadAwaitingControllerApproval();
            break;
        case "LoadInReview":
            LoadInReview();
            break;
        case "LoadAwaitingFinalization":
            LoadAwaitingFinalization();
            break;
    }
}

また、updateprogress コントロールを使用できるように、すべてを updatepanel にラップしました。したがって、基本的には、コマンドを起動するヘッダーをクリックすると、リンク ボタンがクリックされます。そのコマンドは、データソースをバインドするイベント ハンドラーにルーティングされます。これは updatepanel にあるため、非同期で発生し、updateprogress コントロールを使用して読み込みインジケーターを表示します。領域全体をカバーする div でリンク ボタンをバックアップし、その div にポストバックを引き起こす onclick イベントを与えることで改善できます。しかし、今のところ、これは機能します。

于 2012-08-28T19:53:48.283 に答える