2014-02-19 3 views
0

asp.net 사이트 및 사용자 정의 컨트롤을 페이지에 추가했습니다. 그러면 한 번 클릭 한 페이지에 두 번째 사용자 정의 컨트롤을 추가하는 단추가 있습니다.프로그래밍 방식으로 사용자 정의 컨트롤 추가

protected void btnAdd_Click(object sender, EventArgs e) 
     { 
      Metric newControl = (Metric)LoadControl("~/Metric.ascx"); 
      Random rnd = new Random(); 
      newControl.ID = "id" + rnd.Next(); 
      placeholder.Controls.Add(newControl); 
     } 

문제는 각 사용자 제어 즉 btnAdd 버튼 첨가 사용자 제어가 더 이상 존재 때문에 발생하는 경우 게시가 발생하지 않은 드롭 다운리스트를 갖는다는 것이다.

나는 btnAdd_Click 메서드가 호출되었을 때만 존재하므로이를 어떻게 극복 할 수 있을까요?

+0

이전과 같은 ID로'Page_Init' 또는'Page_Load' (최근)에 다시 만드십시오. 따라서 이미 생성 된 컨트롤의 수를 'ViewState'와 같이 유지해야합니다. http://www.4guysfromrolla.com/articles/092904-1.aspx –

+0

이 링크는 도움이 될 수 있습니다. http://stackoverflow.com/questions/682269/custom-control-loads-a-user-control-postback-events- 트리거되지 않습니까? rq = 1, 사용자로드 컨트롤에서 페이지로드시 다시로드 할 수 있도록 생성 된 사용자 컨트롤의 상태를 유지해야하는 경우에 유용합니다. 그것은 단지 아이디어 일뿐입니다. –

답변

0

WebForms에서 동적으로 생성 된 컨트롤을 처리하는 것은 복잡합니다. 따라서 첫 번째 권장 사항은 동적으로 추가 된 컨트롤을 사용하지 않고 문제를 해결하는 것입니다. 리피터 또는 보이기/보이지 않는 컨트롤 (별로 아름답지는 않지만 안정적이지는 않음)이 있습니다.

이것이 가능하지 않은 경우 이벤트를 안정적으로 연결하기 위해 페이지 수명주기의 초기에 (예 : Page_Init) 동적으로 추가 된 컨트롤을 다시 만들어야합니다. 따라서 사용자가 재 작성한 컨트롤에 동일한 ID를 할당하는 결정 론적 접근 방식을 필요로 할 때 UserControls의 ID를 할당하는 방식을 변경해야합니다. Metric1, Metric2, ...와 같은 ID를 사용할 수 있습니다 ('PlaceHolder.Controls'의 마지막 개수는 할당 된 숫자입니다). 추가 된 컨트롤 수에 액세스하려면 페이지를 저장해야합니다. Page_Init. 페이지에 숨겨진 필드를 추가하십시오.

Page_Init에서 컨트롤을 다시 만들려면 코드를 추가해야합니다. 따라서 페이지에 이미 배치 된 컨트롤의 수를 알아야합니다. 요청의 Form-collection에서이를 검색 한 다음 컨트롤을 다시 만들 수 있습니다.

동적 컨트롤을 처리하는 방법에 대한 자세한 내용은 link을 참조하십시오.

관련 문제