2012-08-17 2 views
1

현재 페이지로드시 데이터베이스에서 바인딩 된 항목을 가진 정적 드롭 다운 목록이 있습니다. 이 드롭 다운 목록의 선택에 따라 ID의 "CustomControl1", "CustomControl2"등의 테이블에 일련의 컨트롤을 동적으로 생성합니다. 드롭 다운 목록의 각 선택 항목마다 서로 다른 컨트롤 유형의 고유 한 컨트롤 집합이지만 모두 생성 된 순서에 따라 동일한 ID를가집니다. 나는이 오류가 무엇입니까 컨트롤의 새로운 생성 할 때 그래서 : 페이지로드에 따라서동적으로 생성 된 컨트롤의 뷰 상태를 지워서 새 컨트롤 추가

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

을 나는 두 가지 방법,과 같이 유효성 검사 컨트롤을 생성하는 XML을 기반으로 컨트롤을 생성하고, 다른 하나가 :

 if (xml != "" && externalProperties.Rows.Count == 0) 
     { 
      LoadExternalProperties(xml); 
      ValidateExternalProperties(xml); 
     } 

내 초기 선택을

, 나는 내가 viewstates가 다른 컨트롤 형식에 대한 일치하지 않기 때문에 컨트롤을 생성 할 수 없습니다 보조 선택을 할 때, 제대로 컨트롤을 생성 할 수 있어요.

그래서 내가해야 할 일은 viewstate가 깨끗하다고 ​​가정합니다.

(후 Page_Init과에서 외부 시도) null로 viewstate가 설정 :

ViewState["CustomControl1"] = null; 

를 행의 테이블 삭제 :의 테이블을 삭제

externalProperties.Rows.Clear(); 

을 나는 다음과 같은 시도 컨트롤 :

externalProperties.Controls.Clear(); 

로드 컨트롤 전후에 EnableViewState 전환 :

externalProperties.EnableViewState = false; 
LoadExternalProperties(xml); 
externalProperties.EnableViewState = true; 
  • 나는 단지 viewstate가 선택을 취소해야하는 경우 목록 변경 드롭 다운의 선택된 인덱스입니다. 이는 다음 단계 (마법사 사용)에서 값을 검색하여 다른 용도로 사용하기 때문입니다.

내가 현재 viewstate를 지워야 할 때를 파악하기 위해 이전에 선택한 색인을 추적하고 있습니다.

답변

0

EnableViewState = false 드롭 다운 목록 컨트롤입니다.

+0

드롭 다운 목록의 viewstate는 유지해야합니다. 그것은 내가 지울 필요가있는 드롭 다운리스트 값을 기반으로 동적으로 생성하는 컨트롤의 viewstate입니다. – Eric