今天遇到一个问题,我写了一个复合控件,里面由很多子控件组成,当我引用其中一个子控件时,例如:
(TextBox)Controls[3]
运行时产生错误:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换“System.Web.UI.TextBox”。
一般发生这种问题是索引写错了,就像上面的第4个子控件并不是TextBox,但经我严密检查,发现并没有产生此类错误!
然后我再看使用了该控件的页面,该源代码是如下形式:
<cc1:Poll ID="Poll1" runat="server">
</cc1:Poll>
</cc1:Poll>
于是终于找到问题的所在,由于开始标签和结束标签之间存在空格,故自然而然地被看成了System.Web.UI.LiteralControl控件,将空格去掉后,就一切正常了。
<cc1:Poll ID="Poll1" runat="server"></cc1:Poll>