2009-12-23 4 views
0

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

Вот код:

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 ...

+0

контекста? Какой язык/библиотека вы используете? –

ответ

0

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

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

2

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

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 = ""; 
      } 
     } 
    } 
} 

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

Смежные вопросы