我有这个结构:
Page
|
+---Ascx
|
+---<div runat="server">
|
+---<asp:button>
我已经知道Findcontrol
不会以递归方式工作。
然而,当我按下按钮然后去调试并写道:
this.FindControl("btn1")
找到"button"
但是
this
= ascx div runat server
包裹按钮那么 如何找到它?根据定义,它不会起作用。
Msdn:
Control.FindControl - &gt;该方法不会在整个控件层次结构中进行搜索 对照
答案 0 :(得分:1)
asp.net有一个不同的树结构,而不是html页面的实际DOM。
同一页面上的控件类似于树的同一分支。因此,通过搜索页面可以找到同一页面上的所有控件。一些自定义控件中的控件也在一起。
答案 1 :(得分:0)
我找到了answer。
仅控制继承自TemplateControl
的实现INamingContainer
接口的控件。
显然<div runat server>
不是其中之一。
即。 UserControl
:
public class UserControl : TemplateControl, IAttributeAccessor, INonBindingContainer, INamingContainer, IUserControlDesignerAccessor
{...}
即。 ContentPlaceHolder
:
public class ContentPlaceHolder : Control, INonBindingContainer, INamingContainer
{...}
在这里我可以看到所有这些控件: