Привет!
У меня есть такой 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?





Простите, что я незнаком с ASP, но разве ваши пути не должны включать @?
<asp: DropDownList ID = "MyDdl" runat = "server" DataSource = '<% # XPathSelect ("Areas / *")%>' DataTextField = "@имя" DataValueField = "@значение" />
XPathSelect не возвращает DataSource, который можно напрямую привязать таким образом. Так же, как у вас был привязан FormView и ваши привязки в нем использовали XPath ("..."), а не Bind ("..."), у вас такая же проблема с DropDownList. Либо создайте стандартный источник данных со своими атрибутами и привяжите к нему DDL, либо создайте собственный HTML-код с помощью ListView, который генерирует теги опций выбора, или что-то в этом роде.
Нет. Это приведет к исключению «DataBinding: 'System.Xml.XmlElement' не содержит свойства с именем '@name'».