0

私はこの構造を持っています:

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

私はそれが再帰的にFindcontrol 機能しないことをすでに知っています。

しかし、ボタンを押してデバッグに行き、次のように書いたとき:

this.FindControl("btn1")それ見つけました"button"

だが

  • this=ascx
  • div runat serverボタンを包むものがあります

では、どうやってそれを見つけたのでしょうか?定義によれば、それは機能することを想定していません。

Msdn:

Control.FindControl- >メソッドは、コントロール内のコントロールの階層全体を検索しません

4

2 に答える 2

1

asp.netには、実際のHTMLページのDOMとは異なるツリー構造があります。

同じページのコントロールは、ツリーの同じブランチにあるようなものです。したがって、同じページ上のすべてのコントロールは、ページを検索することで見つけることができます。一部のカスタムコントロール内にあるコントロールもすべて一緒になっています。

于 2013-03-03T19:10:44.910 に答える
0

私は答えを見つけました。

インターフェイスTemplateControlを実装するから継承するコントロールのみ。INamingContainer

そして明らか <div runat server>にそれらの1つではありません。

すなわちUserControl

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

すなわちContentPlaceHolder

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

そしてここで私はそれらすべてのコントロールを見ることができます:

ここに画像の説明を入力してください

于 2013-03-03T19:22:31.040 に答える