今天遇到了一个问题,用了很多方法去找原因,最后终于发现了问题的所在。
出现的提示就是标题上写的:“当前上下文中不存在名称"XXX"”
我开始一直以为是我自定义控件引用的时候出现了问题,因为报错上写的名称我在前台中都能找到相应的ID,这可是好几百个啊,不可能我写错ID的问题,因为我是复制的。所以我以为是在编译这之前的某处出现了问题,一上午就围绕着自定义控件去排查了,事实证明我的反应还是有点慢半拍。
下午的时候我放弃了排查自定义控件,而是转到了前台,因为之前有一个很庞大的<table>,因为项目需要,我把整个<table>放入了<asp:Repeater>里,当前,如果要想使用<asp:Repeater>的话,当然要使用<ItemTemplate>这个标签(具体的Repeater控件如何使用,在我前一篇文章里有写),后来总之我就排除了所有其它可能影响的因素,只在<table>外面加了一个<asp:Repeater>和<ItemTemplate>,最后编译的时候仍然报本文的错误,到这我只能认为确实是如报错所述的“找不到名称”。找问题的过程就是这么纠结的,我也是在刚才快下班的时候才最终找到,解决的。
解决办法就是一切包含在<ItemTemplate>这类标签里的控件,如果你想在后台引用其ID的话,必须利用FindControl()这个方法,举个例子:
<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这个控件赋值的话,需要如下的引用方法:
((Label)Repeater1.Items[0].FindControl("label1")).Text = "可以正确赋值";
出现这个问题的原因可能很多,我这里只是其中一种,总之无论遇到什么问题,大家都要安下心来,多去尝试,最后总会解决的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。