asp.net 关于提示“当前上下文中不存在名称"XXX"”的一种情况的解决办法

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

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

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

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

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

1
2
3
4
5
6
7
8
9
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
   <table id="Table1" >
   <tr >
   <td><asp:label id="label1" runat="server" /> </td>
   </tr >
   </table>
</ItemTemplate>
</asp:Repeater>

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


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


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










本文转自 我不会抽烟 51CTO博客,原文链接:http://blog.51cto.com/zhouhongyu1989/1302881,如需转载请自行联系原作者

上一篇:C# 泛型分组和Linq分组的异同


下一篇:【对讲机的那点事】融洽2.0:*对讲,与专业公网对讲机混合编组