문제

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

도움이 되었습니까?

해결책 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

다른 팁

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top