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