我试图改变一对服务器控件(特别是LinkButton和Label)在相同LinkButton的onclick事件期间嵌套在中继器的ItemTemplate部分内部的可见性。实际上我已经找到了解决方案,但我不明白它为什么会起作用,而不是我之前尝试的方式。我试图最初如下:为什么FindControl不能与我的中继器一起工作?
嵌套ItemTemplate模板内的中继器的
<asp:LinkButton ID="lnAdd" CommandArgument='<%#Eval("index") %>' runat="server" Text="Add" OnClick="lnAdd_Click"> </asp:LinkButton>
<asp:Label Visible="false" runat="server" ID="videoAdded" Text="Video Added"></asp:Label>
然后就是lnAdd_Click函数中我有:
Repeater1.FindControl("lnAdd").Visible = false;
Repeater1.FindControl("videoAdded").Visible = true;
其中Repeater1是的标识中继器这些控制是在这似乎什么都不做(尽管它编译)。我认为这是因为一些未知的原因,这些控制没有找到。
什么工作是以下问题的最终答案:Server controls in an asp.net repeater
的解决方案似乎做得非常类似的什么我试图做一些事情。它甚至在中继器上使用FindControl。唯一的区别(我可以看到)是通过sender对象获得中继器。嗯,实际上,现在我认为它的元素ID由.Net更改为ctl00_ContentPlaceHolder1_Repeater1_ctl02_lnAdd
这类实际运行时的无意义,所以也许这就是为什么它没有找到它。但同时,在工作解决方案中,我只给出了像“lnAdd”这样的正常ID。 .Net是否自动翻译它?为什么它会为此解决方案而做,而不是我原本试图做的?
无论如何,我觉得这里有一些基本的东西,我不是很掌握和希望得到一些启示:d
感谢您的回应,您的方法也有效,但我更感兴趣的是为什么我试过的失败以及我提交的方法工作。不过,谢谢你的回答! – Trajanus 2009-10-12 22:26:50