可以';在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选择控件)。。。有人能告诉我原因或解决我的问题吗?
是否将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>