将DropDownList DataSource绑定到XPathSelect

时间:2008-12-10 19:36:33

标签: asp.net data-binding drop-down-menu

问候!

我有一些像这样的XML:

<Root>
    <MainSection>
        <SomeNode>Some Node Value</SomeNode>
        <SomeOtherNode>Some Other Node Value</SomeOtherNode>
        <Areas>
            <Area someattribute="aaa" name="Alpha" value="0" />
            <Area someattribute="bbb" name="Beta" value="1" />
            <Area someattribute="ddd" name="Delta" value="2" />
        </Areas>
    </MainSection>
</Root>

我在我的网络表单上有一个FormView,其中绑定了许多值。我想将Areas子节点绑定到DropDownList,如下所示:

<asp:FormView ID="MyFormView" runat="server" DataSourceID="MyXmlDataSource">
    <ItemTemplate>
        <h1><%# XPath("SomeNode")%></h1>
        <asp:Label ID="MyLabel" runat="server" AssociatedControlID="MyDdl" Text='<%# XPath("SomeOtherNode")%>' />
        <asp:DropDownList ID="MyDdl" runat="server" DataSource='<%# XPathSelect("Areas/*") %>' DataTextField="name" DataValueField="value"></asp:DropDownList>
    </ItemTemplate>
</asp:FormView>
<asp:XmlDataSource ID="MyXmlDataSource" runat="server" XPath="Root/MainSection" />

不幸的是,我没有在下拉列表中看到我期望的数据,而是看到3个带有“Area”的条目作为文本而没有值。

我知道我的XML没问题,因为出于测试目的,我尝试在页面上抛出Repeater控件,如下所示:

<asp:Repeater ID="MyRepeater" runat="server" DataSource='<%# XPathSelect("Areas/*") %>'>
    <ItemTemplate>
        <%# XPath("@name") %> - <%# XPath("@value") %><br />
    </ItemTemplate>
</asp:Repeater>

这很好。

绑定到下拉列表时是否存在错误,可能是DataTextField和DataValueField属性?

2 个答案:

答案 0 :(得分:2)

XPathSelect不会返回可以直接绑定的DataSource。就像你有FormView绑定和你的绑定使用XPath(“...”)而不是绑定(“...”),你有DropDownList相同的问题。使用您的属性构建标准DataSource并将DDL绑定到该属性,或者使用生成select选项标签或类似内容的ListView滚动您自己的HTML。

答案 1 :(得分:-1)

原谅我对ASP的不熟悉,但你的路径不应该包括@?

&lt; asp:DropDownList ID =“MyDdl”runat =“server”DataSource ='&lt;%#XPathSelect(“Areas / *”)%&gt;' DataTextField =“ @name ”DataValueField =“ @value ”/&gt;