【问题标题】:xml using with bulleted list in asp.netxml 在 asp.net 中与项目符号列表一起使用
【发布时间】:2015-10-09 11:41:28
【问题描述】:

我正在尝试创建一个项目符号列表并使用 xml 文件 (Kategoriler.xml) 作为数据源。这是我的xml 代码:

<bookstore>
 <book category="cooking">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
 </book>
</bookstore>

及页面设计:

<asp:BulletedList ID="BulletedList2" runat="server" BulletStyle="Numbered" DataSourceID="XmlDataSource1">
</asp:BulletedList>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Kategoriler.xml"></asp:XmlDataSource>

当我运行代码时,我会看到如下列表:

1.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
2.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
3.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor
4.System.Web.UI.WebControls.XmlDataSourceNodeDescriptor

我不知道我做错了什么。 感谢您的宝贵时间。

【问题讨论】:

    标签: c# asp.net .net xml bulletedlist


    【解决方案1】:

    您必须在BulletedList 中指定DataTextFieldDataValueField 属性:-

    <asp:BulletedList ID="BulletedList2" runat="server" BulletStyle="Numbered" 
         DataSourceID="XmlDataSource1" DataTextField="author" DataValueField="year" >
    </asp:BulletedList>
    

    更新:

    @Michael 是正确的XmlDataSource 不适用于 xml 节点的值,而只能用于属性,因此您必须像这样修改您的 XML:-

    <bookstore>
     <book category="cooking">
      <title lang="en">Everyday Italian</title>
      <author name="Giada De Laurentiis" year="2005"></author>
      <year></year>
      <price>30.00</price>
     </book>
    </bookstore>
    

    然后,您必须像这样指定XPath 属性:-

    <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Kategoriler.xml" 
      XPath="/bookstore/book/author"></asp:XmlDataSource>
    

    然后,相应地更改您的 BulletedList 属性:-

    DataTextField="name" DataValueField="year"
    

    但是,实际上您可能无法更改 XML 本身,因此您可以在后面的代码中读取此 XML,然后以编程方式绑定您的 BulletedList。

    更新 2:

    正如我所说,根据XMLDataSource 行为更改您的 XML 文件是不切实际的,您也可以使用LINQ-to-XML 来查询您的 XML 文件并像这样绑定它:-

    XDocument xdoc = XDocument.Load(@"YourXMLFilePath");
    var XMLdata = xdoc.Descendants("book")
                       //Optional Filter
                       .Where(x => (string)x.Attribute("category") == "cooking") 
                       .Select(x => new
                               {
                                  AuthorName = (string)x.Element("author"),
                                  Year = (string)x.Element("year")
                               });
    

    最后,你可以像这样绑定数据:-

    BulletedList2.DataSource = XMLdata;
    BulletedList2.DataValueField = "Year";
    BulletedList2.DataTextField = "AuthorName";
    BulletedList2.DataBind();
    

    【讨论】:

    • won't work bcuz authoryear 是节点而不是属性。
    • 感谢您的回复。现在我收到类似“DataBinding: 'System.Web.UI.WebControls.XmlDataSourceNodeDescriptor', does not contain an attribution like author.'之类的错误。”
    • @KorayDurudogan - 是的,这是 XMLDataSource 的一个限制,它不适用于元素,而是适用于属性。
    • @KorayDurudogan - 检查我的第二次更新。您不必修改您的 XML。对我来说效果很好。
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多