0

我有这个结构:

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

我已经知道递归不起作用Findcontrol

但是,当我按下按钮并去调试并写道:

this.FindControl("btn1")确实找到了"button"

  • this= ascx
  • 有一个div runat server包裹按钮

那么它是怎么找到的呢?根据定义,它不应该工作。

女士号:

Control.FindControl --> 该方法不会在控件内的控件层次结构中进行搜索

4

2 回答 2

1

asp.net 的树结构与 html 页面的实际 DOM 不同。

同一页面上的控件就像在树的同一分支上。所以可以通过搜索页面找到同一页面上的所有控件。一些自定义控件内的控件也都在一起。

于 2013-03-03T19:10:44.910 回答
0

我找到了答案

控制继承自TemplateControl,实现INamingContainer接口的控件。

显然 <div runat server>不是其中之一。

UserControl

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

ContentPlaceHolder

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

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

在此处输入图像描述

于 2013-03-03T19:22:31.040 回答