Pergunta

I have this structure :

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

I already know that Findcontrol doesn't work recursively .

However when I pressed the button and went to debug and wrote :

this.FindControl("btn1") it did find the "button"

But

  • this= the ascx
  • There is a div runat server which wraps the button

So how did it find it ? According to the definition , it doesn't suppose to work.

Msdn :

Control.FindControl --> The method does not search throughout a hierarchy of controls within controls

Foi útil?

Solução 2

I found the answer.

Only controls which inherits from TemplateControl, which implements the INamingContainer interface.

and obviously <div runat server> is not one of them.

i.e. UserControl :

public class UserControl : TemplateControl, IAttributeAccessor, INonBindingContainer, INamingContainer, IUserControlDesignerAccessor
{...}

i.e. ContentPlaceHolder:

public class ContentPlaceHolder : Control, INonBindingContainer, INamingContainer
{...} 

and here I can see all those controls :

enter image description here

Outras dicas

The asp.net have a different tree struct than the actually DOM of html page.

The controls on the same page are like on the same branch of the tree. So all the controls on the same page can be found by searching the page. The controls that are inside some custom control are also all together.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top