2009-07-08 2 views
0

n ASP.NET AJAX UpdatePanel 컨트롤에 중첩 된 DetailsView 내에 중첩 된 TextBox의 컨트롤 ID를 찾는 방법은 무엇입니까?ASP.NET에서 AJAX UpdatePanel 컨트롤에 중첩 된 DetailsView 내에 중첩 된 TextBox의 컨트롤 ID를 찾는 방법은 무엇입니까?

heirachy은 다음과 같습니다 UpdatePanel1 -> dvContentDetail (위해 DetailsView 컨트롤) -> TextBox2를

내가 좋아하는 뭔가를 시도

다음 있었으나 결국 개체가 발견되지 않는 것을 말한다 :

UpdatePanel1.FindControl("dvContentDetail").FindControl("TextBox2").ClientID 
+0

이 유 PLZ 말해 줄 수 있기 때문에 updatepanel에서 컨트롤을 찾을 필요가 없다 .. . UU 페이지 코드를 게시 할 수 있습니다 ... –

+0

내가 뭘 하려는지 생각하고 올바른 위치에 컨트롤을 얻고있다 ... 당신이 컨트롤을 얻고 싶다면 당신이 details databound 이벤트에서 컨트롤을 가져야한다고 생각해. 값 .... –

+0

데이터 바운드 후 컨트롤을 찾으려고하면 네, 더 나은 결과를 얻고 있습니다. – cyberbobcat

답변

1

유 컨트롤을 찾는 경우 코드는 다음과 같이 될 것입니다 당신 때문에 직접 사용할 수 이러한 컨트롤, ...

TextBox TextBox2 = (TextBox)dvContentDetail.FindControl("TextBox2"); 
+0

이것은 작동하지 않습니다. "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."라는 동일한 오류 메시지가 나타납니다. – cyberbobcat

+0

코드를 올바른 위치에 배치하면 작동합니다. - 즉. 통제가 databound 후에. - 감사. – cyberbobcat

0

당신은 할 수 아래 코드와 같은 것을 시도해보십시오. 하지만 계층 구조가 이 아니라는 것을 알고 있다면이 변경 될 것이므로 일련의 "FindControl"호출을 수행하는 것이 더 낫습니다. 올바른 계층 구조를 찾으려면 응용 프로그램을 디버그하고 제어 계층 구조를 검색하십시오.

public static T FindControlRecursiveInternal<T>(Control startingControl, string controlToFindID) where T : Control 
{ 
    if (startingControl == null || String.IsNullOrEmpty(controlToFindID)) 
     return (T)null; 

    Control foundControl = startingControl.FindControl(controlToFindID); 
    if (foundControl == null) 
    { 
     foreach (Control innerControl in startingControl.Controls) 
     { 
      foundControl = FindControlRecursiveInternal<T>(innerControl, controlToFindID); 
      if (foundControl != null) 
       break; 
     } 
    } 

    return (T)foundControl; 
} 
관련 문제