asp.NetFindControlメソッドのエラーと解析

1397 ワード

1.FindControlメソッドが探す範囲は、指定されたControlの子孫コントロールであると考えられる.





上のコードのように、バックグラウンドはPanel 1を使用します.FindControl(「Button 1」)は、このような範囲が小さいと効率が向上すると考えているが、実際にはTextBox 1を用いる.FindControl(「Button 1」)も同様に見つかります.前述したように、FindControlメソッドは、IDに基づいてControlが存在するネーミングコンテナ内で対応するコントロールを探す.TextBox 1が実行するとき.FindControl(「Button 1」)の場合、ASP.NETはまずTextBox 1を取得する.NamingContainerは、ページ自体(最後に生成されたxxxx_aspxクラスのインスタンス)の値で、対応するIDのコントロールを下に再帰的に探しているので、Button 1も同様に見つかります.
同じようにTextBox 1を使うとFindControl(「Label 1」)もLabel 1を見つけることができます.
2.なぜか分からない.FindControlメソッドではGridViewのコントロールが見つかりません.
FindControlメソッドでは、本ネーミングコンテナの下でのみ検索され、他のネーミングコンテナには検索されません.ネーミングコンテナ(NamingContainer)はページ自体だけでなく、GridView、DataListItem、RepeaterItem、UserControl、MasterPageなど多くのコントロールがあり、これらはINamingContainerインタフェースを継承しています.これらの1つの顕著な特徴は、そのサブコントロールのUniqueIDおよびClientIDが一般的にID(最上位のページオブジェクトを除く)と異なることである.
3.FindControlは稼働効率が悪いと思われる.
実はASP.NET実行時にaspx、ascx、masterなどのファイルラベル構造を分析し、Domのようなコントロールツリーを生成する.一般的に、ツリーに対するクエリーの操作効率は比較的高く、特に問題の規模があまり大きくない場合.一般的に、実際のページのコントロールの数は数千に達することはできません.また、このネーミングコンテナを越えることはできません.これらの要因は問題の規模を制限しています.だからFindControlの効率は悪くない.