我試圖改變一對服務器控件(特別是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