【问题标题】:Binding an xml node's children to ASP.Net DropDownList将 xml 节点的子节点绑定到 ASP.Net DropDownList
【发布时间】:2010-11-30 17:09:13
【问题描述】:

我正在尝试将 XML 节点的内容绑定到下拉列表,但没有成功。

最初,整个 XML 文档都绑定到一个转发器 - 这很完美,但是现在我需要根据“”节点中的子节点显示一个下拉列表,但我得到了数据在根级别是无效的。在 dropDownList 上的 DataBind() 方法上的第 1 行位置 1 错误消息。

谁能告诉我我做错了什么??

我使用的代码 sn-p 是:

    IXPathNavigable x = (IXPathNavigable)e.Item.DataItem;
    XPathNavigator questionNode = x.CreateNavigator();
   string question = questionNode.SelectSingleNode("questionText").ToString();

   //string title = xePage.SelectSingleNode("q").InnerText;

    Literal questionText = (Literal)e.Item.FindControl("litQuestionText");
    questionText.Text = question;
    Panel iconDiv = (Panel)e.Item.FindControl("divIcon");
    iconDiv.CssClass = string.Format("icon {0}", questionNode.SelectSingleNode("iconType"));
    Panel sliderPanel = (Panel)e.Item.FindControl("pnlSlider");
    DropDownList answerDropDown = (DropDownList)e.Item.FindControl("ddlAnswer");
    TextBox answerText = (TextBox)e.Item.FindControl("txtAnswer");

    switch (questionNode.SelectSingleNode("answerType").ToString())
    {
        case "d": 
            sliderPanel.Visible = false;
            answerText.Visible = false;
            answerDropDown.Visible = true;

            XmlDataSource answersList = new XmlDataSource();
            answersList.Data = questionNode.Select("answers").ToString();
            Response.Write(answersList.ToString());
            //XPathNodeIterator answers = questionNode.Select("answers");
            //answers.AsQueryable();
            answersList.ID = questionNode.SelectSingleNode("questionId").ToString();
            answerDropDown.DataSource = answersList;
            answerDropDown.DataTextField = "@display";
            answerDropDown.DataValueField = "@value";
            answerDropDown.DataBind();
            break;

        case "s":
            sliderPanel.Visible = true;
            answerText.Visible = false;
            answerDropDown.Visible = false;
            break;
        case "t":
            sliderPanel.Visible = false;
            answerText.Visible = true;
            answerDropDown.Visible = false;
            break;

我使用的 XML 是这样的:

<questions>
  <question>
    <questionId>1</questionId>
    <questionText>Question here?</questionText>
    <iconType>a</iconType>
    <answerType>d</answerType>
    <answers>
      <answer value="-3" display="Extremely badly"/>
      <answer value="-2" display="Very badly"/>
      <answer value="-1" display="Quite badly"/>
      <answer value="0" display="Neither well nor badly"/>
      <answer value="1" display="Quite well"/>
      <answer value="2" display="Very well"/>
      <answer value="3" display="Extremely well"/>
    </answers>
  </question>
  <question>
    <questionId>1</questionId>
    <questionText>Question again here?</questionText>
    <iconType>b</iconType>
    <answerType>s</answerType>
    <answers/>
  </question>
</questions>

【问题讨论】:

  • 好的,所以 XML 根本没有格式化...
  • 如果有人知道如何正确添加 xml,我将不胜感激,因为显然代码标签不会剪切它......
  • 代码,包括 xml,通过缩进至少 4 个空格来格式化。
  • 谢谢山姆,现在似乎可以正常工作了...

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


【解决方案1】:

显然我错过了 xml 文档顶部的 xml 声明。聪明。

但是,实现此功能的最佳方法是为问题和答案创建一个 Questionnaire 对象和类,然后通过反序列化 XML 将其转换为类。然后,您可以将调查问卷的问题绑定到下拉列表中,并且在您必须执行创建对象的初始工作之后,它基本上可以更好、更轻松地工作。

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2011-02-09
    • 2017-07-06
    • 2020-08-25
    相关资源
    最近更新 更多