2

我有一个 div (id=main),里面包含 15 个 html 选择控件,它们的 ID 分别是 ddl1、ddl2、ddl3、...等等。

现在我想从 XML 文件中动态选择或分配它们的索引,所以我编写了这段代码。

private void readxml(string spath) {
  XmlDocument doc = new XmlDocument();
  doc.Load(spath);
  //doc.LoadXml(spath);
  XmlNodeList xmlnodes = doc.SelectNodes("/Hedge/*");
  for (int i=1; i <= 15; i++) {
    (main.FindControl("ddl" + i) as DropDownList).SelectedIndex = Int32.Parse(xmlnodes[i].InnerText);
  }
}

但是这里发生错误...

你调用的对象是空的。

这可能是因为它无法找到控件(HTML 选择控件)......谁能告诉我原因或解决我的问题?

4

3 回答 3

2

你添加runat="server"到控件和一个Id="ddl1"

于 2013-02-12T09:08:46.577 回答
2

在这种标记的情况下:

<div id="main" runat="server">
    <select id="ddl1" runat="server"></select>
</div>

类型ddl1不会是 DropDownList 而是 HtmlSelect,因此将代码更改为:

(main.FindControl("ddl" + i) as HtmlSelect).SelectedIndex = Int32.Parse(xmlnodes[i].InnerText);

如果仍然是 null 错误,那么很有可能xmlnodes是 null,这意味着加载 XML 文档或选择节点时出错了。

于 2013-02-12T09:09:46.040 回答
1

有两件事可能出错了。一个很明显

  (main.FindControl("ddl" + i) as DropDownList).SelectedIndex = 
            Int32.Parse(xmlnodes[i].InnerText);

由于您没有使用 asp.net 下拉列表,因此您不能将其转换为该列表。所以应该是

     (main.FindControl("ddl" + i) as HtmlSelect).SelectedIndex = 
                                                    Int32.Parse(xmlnodes[i].InnerText);

runat="server"如果您要起诉html controls并希望在 C# 页面上访问它,另一个可能是需要存在的属性。

   <select id="Select1" runat="server">
     <option value="1" Selected="True"> Item 1 </option>
     .....
  </select>
于 2013-02-12T09:18:30.377 回答