Привязка источника данных DropDownList к XPathSelect

Приветствую!

У меня есть некоторые 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 записи с «Площадь» в качестве текста и без значений.

Я знаю, что мой XML в порядке, потому что в целях тестирования я попытался добавить элемент управления Repeater на страницу следующим образом:

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

И это работало нормально.

Есть ли что-то, что я делаю неправильно при привязке к выпадающему списку, возможно, со свойствами DataTextField и DataValueField?

10.12.2008 19:36:33
2 ОТВЕТА
РЕШЕНИЕ

XPathSelect не возвращает DataSource, который может быть напрямую связан таким образом. Точно так же, как у вас был привязан FormView, а ваши привязки в нем использовали XPath ("..."), а не Bind ("..."), у вас возникла та же проблема с DropDownList. Либо создайте стандартный DataSource с вашими атрибутами и свяжите с ним DDL, либо сверните свой собственный HTML с ListView, который генерирует теги опций выбора или что-то в этом роде.

2
28.01.2009 02:56:51

Простите, что я плохо знаком с ASP, но разве ваши пути не должны включать @?

<asp: DropDownList ID = "MyDdl" runat = "server" DataSource = '<% # XPathSelect ("Areas / *")%>' DataTextField = " @name " DataValueField = " @value " />

-1
10.12.2008 20:07:08
Нет. Это приводит к тому, что «DataBinding:« System.Xml.XmlElement »не содержит свойство с исключением« @name ».
Bullines 10.12.2008 20:14:12