ASP.NET Есть ли лучший способ найти элементы управления, которые находятся в пределах других элементов управления?

66
9

В настоящее время у меня есть раскрывающийся список внутри элемента управления ascx. Мне нужно "найти" его из кода позади другого ascx, который находится на той же странице. Это значение используется как параметр для объекта ObjectDataSource на ascx # 2. В настоящее время я использую этот уродливый фрагмент кода. Это работает, но я понимаю, что если бы заказ на конрол должен был измениться или что-то другое, это не было бы там, где я ожидаю. Есть ли у кого-нибудь советы, как я должен это делать должным образом?


if(Page is ClaimBase)
{
var p = Page as ClaimBase;
var controls = p.Controls[0].Controls[3].Controls[2].Controls[7].Controls[0];
var ddl = controls.FindControl("ddCovCert") as DropDownList;
}

Спасибо и с Новым годом!
~ ck в Сан-Диего

спросил(а) 2021-01-19T18:45:06+03:00 9 месяцев, 1 неделя назад
1
Решение
121

Как правило, я реализую функцию FindInPage или рекурсивную функцию FindControl, когда у вас есть много контрольных решений, где вы просто передадите ей элемент управления, и он будет рекурсивно спускаться с деревом управления.


Если это просто одноразовая вещь, рассмотрите возможность использования элемента управления, который вам нужен в вашем API, чтобы вы могли получить к нему доступ напрямую.

public static Control DeepFindControl(Control c, string id)
{
if (c.ID == id)
{
return c;
}
if (c.HasControls)
{
Control temp;
foreach (var subcontrol in c.Controls)
{
temp = DeepFindControl(subcontrol, id);
if (temp != null)
{
return temp;
}
}
}
return null;
}

ответил(а) 2021-01-19T18:45:06+03:00 9 месяцев, 1 неделя назад
121

Вывести свойство в класс управления пользователя, который вернет требуемое значение. Пусть страница доступа к свойству.

Только пользовательский элемент управления должен знать, какие элементы управления находятся внутри него.

ответил(а) 2021-01-19T18:45:06+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема