Каждый элемент управления на странице имеет свойство «controls», которое содержит все его дочерние элементы управления. Я написал рекурсивные функции для их обхода, но у меня их нет. Позвольте мне попытаться написать один очень быстро:
public Collection<Control> findControlsWithAttributes(Control startingControl)
{
Collection<Control> toReturn = new Collection<Control>();
foreach (Control curControl in startingControl.controls)
{
if (DO COMPARISON HERE WITH CURCONTROL) toReturn.add(curControl);
if (curControl.Count() > 0) findControlsWithAttributes(curControl, toReturn);
}
return toReturn;
}
private void findControlsWithAttributes(Control startingControl, Collection<Control> inputCollection)
{
foreach (Control curControl in startingControl.controls)
{
if (DO COMPARISON HERE WITH CURCONTROL) inputCollection.add(curControl);
if (curControl.Count() > 0) findControlsWithAttributes(Control startingControl, Collection<Control> inputCollection);
}
}
Прошло немного времени с тех пор, как я это сделал, и я не могу вспомнить, если Collection.Count - это метод или свойство, поэтому сначала убедитесь, что вы проверили это, но если вы пропустите страницу в затем он проверит все видимые сервером элементы управления на вашей странице и вернет коллекцию, содержащую элементы управления, которые соответствуют вашему сравнению.
Наконец, Control.Attributes вернет коллекцию AttributeCollection, с которой вы сможете впоследствии сравнить.