首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XmlDataSource填充DropDownList

从XmlDataSource填充DropDownList
EN

Stack Overflow用户
提问于 2009-03-10 17:16:40
回答 3查看 12.2K关注 0票数 2

我想用一个简单的xml文件填充我的DropDownList:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<Databases>
  <Database>foo</Database>
  <Database>bar</Database>
  <Database>baz</Database>
</Databases>

我的XPath是

代码语言:javascript
复制
/Databases/Database

我的下拉列表呈现为:

代码语言:javascript
复制
<select name="databaseDropDownList" id="databaseDropDownList"> 
                    <option selected="selected" value="System.Web.UI.WebControls.XmlDataSourceNodeDescriptor">System.Web.UI.WebControls.XmlDataSourceNodeDescriptor</option>
                    <option value="System.Web.UI.WebControls.XmlDataSourceNodeDescriptor">System.Web.UI.WebControls.XmlDataSourceNodeDescriptor</option>
                    <option value="System.Web.UI.WebControls.XmlDataSourceNodeDescriptor">System.Web.UI.WebControls.XmlDataSourceNodeDescriptor</option>
</select>

我应该如何提取文本?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-10 17:52:12

我想不起来了,但我认为XmlDataSource中有一个bug,它阻止您绑定到xml节点的值。它只适用于属性。如果我说错了,请纠正我。您需要对您的XML文件做一点小小的修改:

代码语言:javascript
复制
<%@ Page Language="C#" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string xml =
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Databases>
  <Database name=""foo"" />
  <Database name=""bar"" />
  <Database name=""baz"" />
</Databases>";
            databasesSource.Data = xml;
            databasesSource.DataBind();
        }
    }
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="databases" runat="server" DataSourceID="databasesSource" DataValueField="name" DataTextField="name" />
        <asp:XmlDataSource ID="databasesSource" runat="server" XPath="/Databases/Database" />
    </div>
    </form>
</body>
</html>

请注意,我添加了name属性,而不是直接使用节点的值。

如果不能修改原始XML文件的结构,可以使用post中描述的TransformFile属性对其应用XSLT转换。

票数 8
EN

Stack Overflow用户

发布于 2009-08-06 18:12:28

今天我也遇到了同样的问题。我的解决方案是:

这是我的xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

<pokemons>
  <pokemon>
    <nome itemname="bulbassaur">bulbassaur </nome>
  </pokemon>
  <pokemon>
    <nome itemname="charmander">chamander </nome>
  </pokemon>
  <pokemon>
    <nome itemname="squirtle"> squirtle </nome>
  </pokemon>
</pokemons>

并且我在DropDownList服务器控件上放置了DataTextField="itemname“。例如:

代码语言:javascript
复制
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
            DataSourceID="XmlDataSource1" DataTextField="itemname">

它工作起来没有任何问题。可能不是最好的解决方案,...但至少比System.Web.UI.WebControls.XmlDataSourceNodeDescriptor好。

票数 3
EN

Stack Overflow用户

发布于 2009-03-10 17:59:16

这里有一种方法--你可以在一个LINQ查询中投影一个ListItems数组:

代码语言:javascript
复制
XDocument doc = XDocument.Parse(@"<Databases>
        <Database>foo</Database>
        <Database>bar</Database>
        <Database>baz</Database>
    </Databases>");

YourList.Items.AddRange(
    (from XElement el in doc.Descendants("Database")
    select new ListItem(el.Value)).ToArray()
);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/631365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档