【发布时间】:2014-02-25 10:38:35
【问题描述】:
抱歉,问题太长了。
由于我遇到了 StackOverflow 异常(具有讽刺意味),我知道其原因,我真的想知道我是否有我的概念,即如何正确实施 FindControl。
我的想法是,如果您要实现一个自定义子控件集合,它应该可供 FindControl 访问,那么除了调用基本方法之外,您还必须实现 FindControl 并搜索您的列表。
所以现在的情况是这样的: 我写了一个服务器控件,它有一个模板属性(我在 init 上添加)。我们暂时称它为“面板”(它不是默认的 asp 面板)
我的结构是这样的:
panel (1)
panel (2)
telerik:RadTabStrip
panel (3)
telerik:RadMultiPage
现在在我进行更改之前,查找控件工作正常,除了如果 radTabStrip 将通过其 id 查找多页,它将开始在 2 中查找,它显然无法找到另一个多页,因为它不是2 的直子。
我的更改是转到 NamingContainer(导致 3)并循环遍历子控件并在那里执行 FindControl。这最初是为了解决这个问题。
但是,在有 3 个孩子且所需控件是第三种的结构中,这种搜索方式会导致在第一个和第二个面板之间来回跳动。所以这是一个触发 StackOverflowException 的兄弟搜索,这是有道理的。
但是,如果我实际上并没有在那里做一些非常错误的事情,这显然对我提出了问题。其他控件似乎可以毫不费力地查看 NamingContainers 的层次结构。
是否有一些 ID 名称寄存器(例如,命名容器中的所有控件都注册其包含的 ID,并且在 findcontrol 中,您只需转到某个查找类来查找您想要的控件,而无需任何自定义逻辑来浏览控件并调用 FindControl ) 我不知道,还是类似的?
我真的希望你能帮我解决这个问题。
我知道如何解决我的问题,但我很想知道如何以正确的方式实际执行此操作。
【问题讨论】: