2012-09-30 5 views
3
foreach(Label l in Controls) // setting all labels' s visbility on page to true 
    l.Visible =true; 

그러나 컨트롤 중 하나는 타입 라벨이 아닌 경우 실행에, 나는 다음과 같은 오류를잘못된 캐스트 예외 C# ASP.Net은

Unable to cast object of type 'ASP.admin_master' to type 'System.Web.UI.WebControls.Label'.

답변

3

원하는 경우 모든 레이블을 페이지에 표시하려면 재귀 함수가 필요합니다.

SetVisibility<Label>(Page, true); 
+0

내가 물었던 것이 .... 모든 계층 구조에서 원하는 것 같아요. –

+0

@RoyiNamir He 질문에서 "페이지의 모든 레이블의 가시성을"true로 설정했다고 말했습니다. – Magnus

+0

추가 체크를 추가 할 수 있습니다 (hasControls) 내 대답을 참조하십시오. :-) –

5

을 얻고, 그 오류가 발생합니다.

당신이 시도 할 수 :

foreach(Label l in Controls.OfType<Label>()) 
{ 
    l.Visible = true; 
} 
+0

은''그것은 의미 : 사용

private void SetVisibility<T>(Control parent, bool isVisible) { foreach (Control ctrl in parent.Controls) { if(ctrl is T) ctrl.Visible = isVisible; SetVisibility<T>(ctrl, isVisible); } } 

만약 내가 같은 페이지에 텍스트 상자와 버튼과 같은 다른 컨트롤을 가지고 있다면 나는 그것을 사용해야합니다 .. 트리 트? 내가 틀렸다면 나를 바로 잡아주세요. 그리고이 코드는 작동하지 않습니다. – kushalvm

+0

이 코드는 적어도 .Net 3.5를 필요로하며 코드 파일의 맨 위에'using System.Linq; '가 있어야합니다. 그 다음엔 괜찮을거야. –

0

확인을 현재의 "L"이 필요한 대상 유형이있는 경우 :

foreach(control l in Controls) { 
    if(l is System.Web.UI.WebControls.Label) 
     l.Visible = true; 
} 
모든 계층에서 원하는 경우
0
foreach(Control l in Controls)  
     if (l is Label) l.Visible =true; 

:

public static void SetAllControls(Type t, Control parent /* can be Page */) 
    { 
     foreach (Control c in parent.Controls) 
     { 
      if (c.GetType() == t) c.Visible=true; 
      if (c.HasControls()) GetAllControls(t, c); 
     } 

    } 

SetAllControls(typeof(Label), this); 
+0

아니요. 작동하지 않음 – kushalvm

+0

@kushal 주요 레이블 _ 표시 할 수 있습니다! 페이지에있는 모든 라벨을 원하십니까? (모든 계층 구조에서) –

+0

이제 9 개의 레이블이있는 간단한 웹 양식을 작성하고 있습니다. 계층 구조는 모두 동일합니다. – kushalvm

0
public void Search(Control control) 
    { 
     foreach (Control c in control.Controls) 
     { 
      if (c.Controls.Count > 0) 
       Search(c); 
      if (c is Label) 
       c.Visible = false; 
     } 
    } 

". 컨트롤 중 하나는, 당신이 오류가 발생합니다 명판이 아닌 경우"
Search(this.Page);