2009-12-21 3 views
-1

마스터 페이지와 해당 콘텐츠 페이지가 있습니다. 콘텐츠 페이지에있는 텍스트 상자를 가져오고 싶습니다. 콘텐츠 페이지의 C# 코드에서 어떻게 가져올 수 있습니까? 를 사용하여마스터 세부 정보 페이지의 컨트롤을 얻는 방법은 무엇입니까?

+0

masterpage 또는 다른 항목으로 가져 오시겠습니까? – RichardOD

+0

RichardOD : "콘텐츠 페이지의 코드 숨김에서 콘텐츠 페이지의 TextBox에 어떻게 액세스 할 수 있습니까?"라는 질문을 읽었습니다. 이것은 사소한 것일 테지만 그가 masterpage에서 접근하는 방법을 알고 싶어 할지도 모르지만 그 질문은 그렇게 말하지 않습니다. –

답변

0

액세스는 ID의 :

마크 업 :

<asp:TextBox runat="server" ID="myTextBox"></asp:TextBox> 

코드 숨김

myTextBox.Text = "This is a text!"; 

주 당신이 액세스 할 수 있도록 runat="server"를 추가해야.

편집
의견을 보내 주신 여러분의 의견을 이해합니다. 모든 텍스트 상자를 찾으려면 컨트롤 트리를 따라 모든 컨트롤을 탐색해야합니다.

var allTextBoxes = FindControls(Page, typeof(TextBox)); 

위의 예는 아이디어를 명확히하는 것입니다

public List<Control> FindControls(Control root, Type type) 
{ 
    var controls = new List<Control>(); 

    foreach (Control ctrl in root.Controls) 
    { 
     if (ctrl.GetType() == type) 
      controls.Add(ctrl); 

     if (ctrl.Controls.Count > 0) 
      controls.AddRange(FindControls(ctrl, type)); 
    } 

    return controls; 
} 

당신이 루트 컨트롤로 페이지를 호출있는 페이지의 모든 텍스트 상자를 얻으려면 : 여기

재귀 구현 어떻게 진행해야하는지. 나는 확장 메서드를 사용하여 다르게 조금 할 줄 :

public static class ExtensionMethods 
{ 
    public static IEnumerable<Control> FindControls(this Control root) 
    { 
     foreach (Control ctrl in root.Controls) 
     { 
      yield return ctrl; 
      foreach (Control desc in ctrl.FindControls()) 
       yield return desc; 
     } 

    } 
} 

이제 모든 컨트롤에 직접 사용하고 심지어는 IEnumerable을 이후 결과에 Linq에 적용 할 수 있습니다.

이 페이지에 당신에게 모든 컨트롤의 배열을 얻을 것이다 :

var allControls = this.FindControls().ToArray(); 

모든 TextBox 컨트롤의 배열을 얻으려면 :

var allTextBoxes = this.FindControls() 
         .OfType<TextBox>().ToLArray<TextBox>(); 

을 특정하여 텍스트 상자의 목록을 얻으려면 ID :

var myTextBox = this.FindControls() 
        .OfType<TextBox>() 
        .Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>(); 

또한 foreach는 문에서 사용할 수 있습니다 :

,
foreach (Control c in this.FindControls()) 
{ 
    ... 
} 
+0

내가 ID로 액세스 할 수 있다는 것을 알았어. 콘텐츠 페이지의 코드 뒤에서 Page.Controls를 사용하여 페이지를 가져 오려고합니다. 하지만 그들은 나에게 콘텐츠 페이지가 아닌 마스터 페이지의 컨트롤을 보여 주지만 TextBox가있는 콘텐츠 페이지의 컨트롤 컬렉션에 액세스하려고합니다. 제발 나를 안내해주세요 –

+0

그냥 마스터 페이지에 콘텐츠 페이지로 제공되는 양식의 Textbox 컨트롤 모음을 가져 오는 방법을 묻습니다. 아무도 대답 할 수 없습니까? –

+0

마스터 페이지에서 콘텐츠 페이지의 TextBox 컨트롤에 액세스 하시겠습니까? –

관련 문제