[英]Can't find HTML control in codebehind
我有一个div(id = main),它里面包含15个html select控件,它们的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的可能性xmlnodes
,这意味着在加载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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.