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

62
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 2 месяца, 3 недели назад
1
Решение
114

Как правило, я реализую функцию 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 2 месяца, 3 недели назад
115

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

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

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

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