2011-03-24 2 views
1

사용할 수있는 인덱스에 따라 특정 컨트롤을로드하는 프로젝트에서 작업하고 있습니다. 로드는 PopulateSearchField 메소드가 호출 된 페이지로드에서 발생합니다.FindControl 내 동적으로 추가 된 UserControl을 찾지 못할 것입니다

이 메서드 내에서 모든 UserControl은 다음을 사용하여 페이지에 추가됩니다. Page.LoadControl ("path");

페이지로드 및 필요한 모든 컨트롤이 페이지에 있습니다. 내 문제는 사용자가 검색 버튼을 클릭하면 이벤트가 트리거되고 해당 컨트롤의 사용자 입력에 따라 쿼리가 작성된 것입니다. 불행하게도이 메서드는 페이지의 컨트롤을 찾을 수 없기 때문에 적절한 쿼리를 생성 할 수 없습니다.

임시 ControlCollection 변수를 사용하면 페이지의 컨트롤 수가 4에서 10 사이 여야한다는 것을 알 수있었습니다. 컬렉션의 3 개의 컨트롤은 정적 레이블과 단추입니다 그 페이지.

이 솔루션이 프레임 워크 1.1에서 작동하는 데 사용 된 것과 같이 코드에 문제가 있거나 페이지주기 문제인지 여부는 알 수 없습니다. 그래,이게 가장 좋은 방법이 아니라는 걸 알지만,이 방법으로 해냈어.

문제의 원인인지 여부는 확실하지 않습니다.

고마워요, David!

+0

업데이트 : 적어도 PopulateSearchField 메서드를 사용하는 위치에 따라 Page_Load 또는 PreInit의 끝 부분에서 Page.Controls 컬렉션에 도달 할 수 있으며 모든 동적 추가 컨트롤이 있습니다. Search_Button.click()에서만 해당 컨트롤이 더 이상 존재하지 않습니다. 어쩌면 당신을 도울 수 있습니다. – David

답변

1

단추를 클릭하면 클릭 핸들러가 처리 될 때 컨트롤이 더 이상 서버 쪽에서 사용할 수 없습니다. 게시 된 값을 매핑 할 서버 측 컨트롤이 없으므로 서버 쪽 페이지에는 동적으로 만든 컨트롤에 대한 지식이 없습니다. 값을 찾으려면 게시 된 제어 데이터를 검사하고 서버 측 asp.net 제어 계층에 의존하지 않아야합니다.

자바 스크립트를 통해 숨겨진 필드에 필요한 모든 데이터를 작성한 다음 게시 될 예정이므로 숨겨진 데이터 서버 측을 읽을 수도 있습니다.

  1. 만들기 컨트롤을 동적으로
  2. 클릭의 컨트롤 데이터를 게시
  3. ASP.NET은 알고있는 기존의 컨트롤에 데이터를 매핑 :

    다음

    가 발생하는됩니다.
  4. 데이터가 아무 것도 매핑되지 않도록 컨트롤을 찾을 수 없습니다.

매핑이 발생하기 전에 (PreInit에서) 컨트롤을 추가해야합니다. Page Lifecycle을 확인하면 모든 컨트롤과 데이터를 함께 묶는 방법을 알 수 있습니다.

+0

정말 고마워, 내가 한 번 시도해 보겠다. 미리 컨트롤 앞에 컨트롤을 추가하여 컨트롤이 매핑되었는지 확인하려고 노력할 것이다. – David

+0

Page_Load 대신 PreInit 컨트롤을 추가 한 것처럼 보이지 않습니다. 아마도 내가 하하를 붙잡고 있지 않은 것이있을 것입니다. 알아낼 페이지 수명주기 전체를 ​​살펴 보겠습니다. – David

+0

방금 ​​디버깅을했는데 두 가지 사실을 알려줍니다. OnPreInit()의 끝에서 내 Page.Controls 컬렉션에는 8 개의 요소가 있는데 이는 동적 검색 필드가 올바르게 추가되었음을 의미합니다. 그러나 Page_Load에 중단 점을 배치하면 Page.Controls에는 이제 세 가지 요소 만 있습니다. 이것은 이상한 일입니다. 같은 컨트롤에서 컨트롤이 사라졌습니다. – David

0

사용자가 검색을 클릭하면 새 페이지에 컨트롤이 다시 추가됩니까?

기억하십시오 ... 사용자가 해당 페이지에 대해 서버를 방문 할 때마다 새로운 Page 개체가 생성됩니다. 동적으로 컨트롤을 추가하는 경우 페이지가로드 될 때마다 컨트롤을 추가해야합니다.

또한 컨트롤에서 값을 가져오고 싶으므로 컨트롤이 항상 동일한 ID 속성으로 만들어지고 이 생성되었는지 확인한 후에 viewstate가로드됩니다. , 당신은 그들이 그들의 가치를 유지하기를 원한다면.

+0

컨트롤에 문제가없는 동일한 ID가 있습니다. 적어도 Page.Controls ControlCollection에서 해당 컨트롤을 볼 수 있다면 값을 가져 오는 것이 쉽지만 컨트롤은 컬렉션의 일부가 아닙니다. – David

+0

고마워요. Whomp :) 이제 내 문제는 ID 문제입니다. 이제 당신이 사용한 것은 매우 유용합니다! – David

관련 문제