NamingContainer 속성을 사용하여 컨트롤의 명명 컨테이너 확인

Visual Studio 2010

업데이트: 2007년 11월

NamingContainer 속성을 사용하여 페이지에서 컨트롤 트리를 탐색할 수 있습니다. 인라인 코드, 즉 선언적 <%#   %> 식에서만 사용할 수 있는 Container 키워드와 달리 NamingContainer 속성은 코드에서 해당 클래스 또는 파생 클래스의 인스턴스에 대해 사용할 수 있습니다.

다음 코드 예제에서는 ASP.NET 웹 페이지의 컨트롤 트리를 탐색하는 방법을 보여 줍니다. 단추의 ChangeBtn_Click 메서드 처리기는 FindControl 메서드를 사용하여 Repeater 컨트롤의 첫 번째 항목에서 Message라는 컨트롤을 검색한 다음 이 컨트롤의 NamingContainer 개체를 확인합니다. 그런 다음 NamingContainer 속성을 처음 호출하여 반환된 컨트롤의 명명 컨테이너를 확인하고 명명 컨테이너가 없는 컨트롤을 찾을 때까지 컨트롤 트리를 탐색합니다. 또한 WalkContainers 메서드는 최하위 수준에서 그 자체가 명명 컨테이너가 아닌 컨트롤의 형식을 추가합니다.

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="head1" runat="server">
    <title>NamingContainer Example</title>
</head>

<script language="c#" runat="server">

    ArrayList list;

    private void Page_Load(object sender, EventArgs e)
    {
        list = new ArrayList();
        list.Add("One");
        list.Add("Two");
        list.Add("Three");
        MyRepeater.DataSource = list;
        MyRepeater.DataBind();
    }

    private void ChangeBtn_Click(object sender, EventArgs e)
    {
        Control x = MyRepeater.Items[0].FindControl("Message");
        if (x != null) list = WalkContainers(x);
        MyRepeater.DataSource = list;
        MyRepeater.DataBind();
    }

    private ArrayList WalkContainers(Control ctl)
    {
        ArrayList ret = new ArrayList();
        Control parent = ctl.NamingContainer;
        if (parent != null)
        {
            ArrayList sublist = WalkContainers(parent);
            for (int j = 0; j < sublist.Count; j++) ret.Add(sublist[j]);
        }
        ret.Add(ctl.GetType().Name);
        return ret;
    }
</script>


<body>
<form id="repeaterform" runat="server">
  <h3>Using the NamingContainer Property to Determine a 
      Control's Naming Container
  </h3>
  <table id="mytable" width="80%">
      <asp:repeater id="MyRepeater" runat="server">
      <ItemTemplate>
        <tr>
          <td align="center" style="width:100%;">
           <span id="message" runat="server">
           <%#Container.DataItem%>
           </span>
          </td>
        </tr>
      </ItemTemplate>
      </asp:repeater>
    <tr>
      <td align="center" style="width:100%;">
      <input id="changebtn" 
             type="submit" 
             onserverclick="ChangeBtn_Click"
             runat="server" />
       </td>
    </tr>
  </table>
</form>
</body>
</html>


표시: