Не удается получить доступ к элементам управления внутри UpdatePanel - PullRequest
0 голосов
/ 23 декабря 2009

Я пытаюсь получить доступ к элементам управления страницы в 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 ]

2 голосов
/ 28 июня 2012

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

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, которые содержат все элементы управления в нем.

0 голосов
/ 28 июня 2012
0 голосов
/ 31 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...