Web Form FindContrl

Find Control 探討

如果有實做INamingContainer 的Control 在Call FindControl時會就自己內部的Controller尋找對應的ID

但當沒有實作的Controller調用FindControl時則會往呼叫上一層的FindControl,如果上層沒有則又在往上層找到有時做的為止(最上層是Page)

有實作INamingContainer的有Page, DataGridVIewRow, UserControl,MasterPage,ContainPlaceholder 

相對的 如果被包在實作INamingContainer的Controller內,更上層的則會找不到

EX:

<asp:TextBox ID="txt1" runat="server" />
<asp:Label ID="Lbl1" runat="server" />
    
<asp:GridVIew id="gv" runat="server">
<column>
       <templateField>
               <asp:Button id="btn2" runat="server" />
       </templateField>
<column>
</asp:GridView>

 

上面:

FindControl("txt1")   =>TRUE

FindControl("btn2")  =>FALSE

txt1.FindControl("lbl1") => TRUE

(gv[0] as GridViewDataRow).FindControl("btn2") =>TRUE