2

我的 Web 表单上有一个 AJAX 手风琴控件。我在 Accordion Pane 中有一个 Asp.Net 标签。我想将标签的文本属性数据绑定到我正在运行的视图模型。

标签文本属性似乎永远不会与视图模型进行数据绑定?如果我将标签拉到 Accordion Pane 外面而不是里面,它会很好地工作吗?

这有效:

<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为每个显式定义的自定义控件调用。根据 Jupaol 提供的答案,它将使用模板构建窗格。AccordionDataBindAccordionPane

在您的示例中,您将需要显式调用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 回答