可以';在codebehind中找不到HTML控件

本文关键字:找不到 HTML 控件 codebehind 可以 | 更新日期: 2023-09-27 17:58:50

我有一个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选择控件)。。。有人能告诉我原因或解决我的问题吗?

可以';在codebehind中找不到HTML控件

是否将runat="server"添加到控件和Id="ddl1"

在这种标记的情况下:

<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文档或选择节点时出错。

有两件事可能出了问题。一个是明显的

  (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>