FindControl没有按预期工作?

时间:2013-03-03 19:03:30

标签: c# asp.net findcontrol

我有这个结构:

Page
 |
 +---Ascx
      |
      +---<div  runat="server">
                    |
                    +---<asp:button>

我已经知道Findcontrol 不会以递归方式工作。

然而,当我按下按钮然后去调试并写道:

this.FindControl("btn1") 找到"button"

但是

  • this = ascx
  • div runat server包裹按钮

那么 如何找到它?根据定义,它不会起作用。

Msdn:

  

Control.FindControl - &gt;该方法不会在整个控件层次结构中进行搜索   对照

2 个答案:

答案 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
{...} 

在这里我可以看到所有这些控件:

enter image description here