我有一个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选择控件)...... 谁能告诉我原因或解决我的问题?
答案 0 :(得分:2)
您是否已将runat="server"
添加到控件和Id="ddl1"
?
答案 1 :(得分: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
为空的概率很高,这意味着加载XML文档或选择节点时出错。
答案 2 :(得分: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>