今天遇到了一个问题,用了很多方法去找原因,最后终于发现了问题的所在。

出现的提示就是标题上写的:“当前上下文中不存在名称"XXX"”

我开始一直以为是我自定义控件引用的时候出现了问题,因为报错上写的名称我在前台中都能找到相应的ID,这可是好几百个啊,不可能我写错ID的问题,因为我是复制的。所以我以为是在编译这之前的某处出现了问题,一上午就围绕着自定义控件去排查了,事实证明我的反应还是有点慢半拍。

下午的时候我放弃了排查自定义控件,而是转到了前台,因为之前有一个很庞大的<table>,因为项目需要,我把整个<table>放入了<asp:Repeater>里,当前,如果要想使用<asp:Repeater>的话,当然要使用<ItemTemplate>这个标签(具体的Repeater控件如何使用,在我前一篇文章里有写),后来总之我就排除了所有其它可能影响的因素,只在<table>外面加了一个<asp:Repeater><ItemTemplate>,最后编译的时候仍然报本文的错误,到这我只能认为确实是如报错所述的“找不到名称”。找问题的过程就是这么纠结的,我也是在刚才快下班的时候才最终找到,解决的。

解决办法就是一切包含在<ItemTemplate>这类标签里的控件,如果你想在后台引用其ID的话,必须利用FindControl()这个方法,举个例子:

这样一个前台代码,如果想在后台给label1这个控件赋值的话,需要如下的引用方法:

((Label)Repeater1.Items[0].FindControl("label1")).Text = "可以正确赋值";

出现这个问题的原因可能很多,我这里只是其中一种,总之无论遇到什么问题,大家都要安下心来,多去尝试,最后总会解决的。