Можно ли получить простой текстовый список элементов управления, присутствующих в веб-форме, с помощью отражения? Обычно коллега хочет получить список элементов управления, которые помогут определить стратегию проверки, например. Обычно номера продуктов должны быть числовыми, но на некоторых экранах они могут быть буквенно-цифровыми. Я думал, что с помощью отражения будет просто сгенерировать список чего-то вроде:
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 содержит несколько перегрузок. Например, если я изменю строку назначения страницы на
Страница page = (Страница) assembly.CreateInstance (types [i] .FullName, true, BindingFlags.NonPublic, null, null, null, null);
то я получаю сообщение об отсутствии конструктора.
Итак, я пошел полностью по неправильному пути или то, что я пытаюсь сделать, вообще возможно? Любая помощь очень ценится.
Изменить: приносим свои извинения за задержку с ответом на этот вопрос. Мы немного пошли дальше, используя Assembly.GetCallingAssembly () для создания списка, но он все еще не совсем соответствовал нашим потребностям. В конце концов, мы использовали более длинный подход к решению «Найти во всем».