【发布时间】:2009-12-11 22:34:54
【问题描述】:
我正在尝试更改在同一 LinkButton 的 onclick 事件期间嵌套在中继器的 ItemTemplate 部分内的一对服务器控件(特别是 LinkButton 和 Label)的可见性。我实际上已经找到了一个解决方案,但我不明白为什么它会起作用,而不是我之前尝试的方式。我最初尝试如下:
嵌套在中继器的 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 是这些控件所在的中继器的ID。这似乎什么都不做(尽管它可以编译)。我认为这是因为某些未知原因未找到这些控件。
以下问题的最后一个答案是有效的:Server controls in an asp.net repeater
该解决方案似乎正在做一些与我尝试做的非常相似的事情。它甚至在中继器上使用 FindControl。唯一的区别(我可以看到)是它通过 sender 对象获取转发器。嗯,实际上,现在我考虑一下,当它实际运行时,元素的 id 被 .Net 更改为像ctl00_ContentPlaceHolder1_Repeater1_ctl02_lnAdd 这样的无意义的东西,所以也许这就是它没有找到它的原因。但同时,在工作解决方案中,我只给出“lnAdd”之类的普通 ID。 .Net 会自动翻译它吗?为什么它会为这个解决方案而不是我最初尝试的方式这样做?
无论如何,我觉得这里有一些基本的东西我还没有完全掌握,希望能得到一些启发:D
【问题讨论】: