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