2

Web フォームに AJAX アコーディオン コントロールを配置しています。アコーディオン ペイン内に Asp.Net ラベルがあります。ラベルのテキスト プロパティを、実行中のビュー モデルにデータバインドしたいと考えています。

ラベル テキスト プロパティは、ビュー モデルとデータ バインドしていないように見えますか? ラベルをアコーディオン ペインの外側に引っ張ると完全に機能しますが、内側には引っ張らないのですか?

これは機能します:

<asp:Label runat="server" Text='<%# Model.Program.NameVisible.ToString() %>' />

これはしません:

<asp:AccordionPane ID="AccordionPane2" runat="server">
    <Header>
        Advanced Search
    </Header>
    <Content>
        <asp:Panel ID="pnlAdvancedSearch" runat="server">
            <table cellpadding="2" cellspacing="0" width="100%" runat="server">
                <tr>
                    <td align="right">
                        <asp:Label runat="server" Text='<%# Model.Program.NameVisible.ToString() %>' />                                
                    </td>
                </tr>
            </table>
        </asp:Panel>
    </Content>
</asp:AccordionPane>

アイデアや回避策はありますか?

ありがとう。

更新: AJAX コントロール内にネストされている場合、これは明らかに機能しません。ModalPopUpExtender 内でもバインディングが行われないという同じ問題がありました。

4

2 に答える 2

2

コントロールのDataBindは、明示的に定義されたカスタムコントロールのそれぞれに対してAccordion呼び出されません。代わりに、Jupaolから提供された回答に従って、テンプレートを使用してペインを作成します。DataBindAccordionPane

DataBindこの例では、バインドするコントロール、またはすべての子でデータバインディングを呼び出す親を明示的に呼び出す必要があります。したがって、あなたの例では、呼び出しpnlAdvancedSearch.DataBind()はあなたのラベルと検索パネル内の他のコントロールをバインドするのに十分です。

<asp:Label>ただし、コントロールを完全に単純なものに置き換える方が簡単なようにも思えます。

<%: Model.Program.NameVisible.ToString() %>
于 2012-07-31T12:48:04.957 に答える
1

私はちょうど方法を見つけました

まず、Accordionコントロールはデータ バインディングをサポートします。

アコーディオンはデータバインドすることもできます。DataSource または DataSourceID プロパティでデータ ソースを指定し、HeaderTemplate および ContentTemplate プロパティでデータ項目を設定するだけです。

ソース

例:

出力

ここに画像の説明を入力

ASPX

<ajax:Accordion runat="server" ID="ajax22"  RequireOpenedPane="true"
    HeaderCssClass="accordionHeader"
    HeaderSelectedCssClass="accordionHeaderSelected"
    ContentCssClass="accordionContent"
>
    <ContentTemplate>
        Even cooler content
        <br />
        <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Something") %>' ID="lbl" runat="server" />
    </ContentTemplate>
    <HeaderTemplate>
        Cool header
        <br />
        <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Something") %>' ID="lbl" runat="server" />
    </HeaderTemplate>
</ajax:Accordion>

ASPX コードビハインド

プロパティを指定する必要がありますAccordion.DataSource。このプロパティはIEnumerableorのみをサポートIListSourceするため、次のようにアコーディオンをバインドする必要があります。

this.ajax22.DataSource = new[] { this.Model };

this.DataBind();

モデル

public class MyModel
{
    public MyModel()
    {
        this.Something = "plop!";
    }

    public string Something { get; set; }
}

をバインドするAccordionと、バインドされた各アイテムを表すために多数のAccordionPanesが作成されます。

追加の custom を指定するAccordionPanesと、上記で指定したバインディングを適用すると、これらAccordionPanesは無視され、レンダリングされません。

于 2012-07-30T23:40:20.647 に答える