リフレクションを使用して Web フォームに存在するコントロールのプレーン テキスト リストを取得することは可能ですか? 基本的に、同僚は検証戦略を定義するのに役立つコントロールのリストを取得しようとしています。たとえば、一般に製品番号は数字でなければなりませんが、特定の画面では英数字にすることができます。リフレクションを使用して次のようなリストを生成するのは簡単だと思いました。
AddProduct.aspx
txtProductNumber
txtProductName
etc.
フォーム名は取得できますが、これまでのところ含まれているコントロールは取得できません。現在のコードは次のようになります。
Assembly assembly = Assembly.LoadFrom(@"Filename.dll");
Type[] types = assembly.GetExportedTypes();
for (int i = 0; i < types.Length; i++)
{
Page page = (Page)assembly.CreateInstance(types[i].FullName);
ControlCollection controls = page.Controls;
// At this point controls.Count = 0 presumably because the controls are defined as protected.
}
Assembly.CreateInstanceには、いくつかのオーバーロードがあります。たとえば、ページ割り当て行を
ページ ページ = (ページ)assembly.CreateInstance(types[i].FullName, true, BindingFlags.NonPublic, null, null, null, null);
次に、コンストラクターが見つからないというエラーが発生します。
それで、私は完全に間違った道を進んだのでしょうか、それとも私がやろうとしていることは実際にはまったく可能ですか? どんな助けでも大歓迎です。
編集:この質問への回答が遅れたことをお詫びします。Assembly.GetCallingAssembly() を使用してリストを生成する方法を少し進めましたが、まだニーズを完全には満たしていませんでした。最終的には、ソリューション全体を検索する、より長い時間をかけたアプローチを使用しました。