2009-12-23 5 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 내의 컨트롤을 검색해야하지만, 디버그 모드를 제외하고는 그 일을하지 못합니다!

내가 중단 점을 추가하면 모든 것이 OK,하지만 내가 웹 응용 프로그램을 실행할 때, 그것은 UpdatePanel 내에서 구성 요소를 찾을 수없는이 ...

+0

상황에 대한 확인이 있나요? 어떤 언어/도서관을 사용하고 있습니까? –

답변

0

이것은 매우 기괴한 디자인처럼 보인다. 즉, 이러한 목적으로 컨트롤 ID를 사용하는 것은 드문 경우입니다.

그럼에도 불구하고 페이지에서 컨트롤을 모두 번으로 진행하려면 재귀 적 방법이 필요합니다. 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에서 컨트롤을 찾을 수 있습니다.

관련 문제