Не удается получить доступ к элементам управления внутри UpdatePanel

Я пытаюсь получить доступ к элементам управления страницы в Page_Load, сделать запрос к базе данных и сделать элементы управления видимыми или невидимыми.

Вот код:

foreach (Control thiscontrol in ContentPlaceHolderBody.Controls) {
    try {
        if (thiscontrol.ID.Contains("TextBox") || thiscontrol.ID.Contains("Label")) {
            string dummy = thiscontrol.ID;
            bool IsValid = db.Roles.Any(a => a.controlName == dummy);
            if (IsValid == false)
                thiscontrol.Visible = false;
        }
        else if (thiscontrol.ID.Contains("UpdatePanel")) {
            foreach (Control UPcontrols in ((UpdatePanel)thiscontrol).ContentTemplateContainer.Controls) {
                if (UPcontrols.ID.Contains("TextBox") || UPcontrols.ID.Contains("DropDownList")) {
                    bool UPIsValid = db.Roles.Any(a => a.controlName == UPcontrols.ID);
                    if (UPIsValid == false)
                        UPcontrols.Visible = false;
                }
            }
        }
    }
    catch { }
}

Моя проблема с UPcontrols! Он должен получить элементы управления внутри UpdatePanelНо дело в том, что он не выполняет свою работу, кроме как в режиме отладки!

Когда я добавляю точку останова, все в порядке, но когда я запускаю веб-приложение, оно не находит никаких компонентов внутри UpdatePanel...

3 ответа

Попробуй это:

ControlCollection cbb = updatepanel1.Controls;
ControlCollection cb = cbb[0].Controls;

initialize_Controls(cb);

public void initialize_Controls(ControlCollection objcontrls)
{

    foreach (Control tb in objcontrls) {
        if (tb is TextBox)
            ((TextBox)tb).Text = "";


        if (tb is Panel) {
            ControlCollection cbcll = tb.Controls;

            foreach (Control tbb in cbcll) {
                if (tbb is TextBox)
                    ((TextBox)tbb).Text = "";
            }
        }
    }
}

Сначала найдите элементы управления из updatepanel т.е. ContentTemplateзатем найдите элементы управления из contentTemplate которые содержат все элементы управления в нем.

Это похоже на очень странный дизайн. То есть использование контрольных идентификаторов для таких целей довольно необычно.

Тем не менее, вам нужен рекурсивный метод, чтобы сделать глубокий обход каждого элемента управления на странице. Ваш метод не будет работать, если UpdatePanel содержится в другом элементе управления.

Другие вопросы по тегам