ASP.Net 페이지에 ajax 툴킷 탭 컨테이너가 있으며 런타임에 코드의 탭을 동적으로 생성하고 있습니다. 탭, 레이아웃은 같지만 헤더 텍스트와 본문 데이터가 다릅니다). 각 탭에는 하나의 컨트롤 만 포함되어 있습니다.이 컨트롤은 모든 탭을 똑같이 보이도록 만들었습니다. 사용자 정의 컨트롤에서 탭 내 데이터의 페이징을 처리하기 위해 작성한 또 다른 사용자 정의 컨트롤입니다. 페이징 사용자 정의 컨트롤에는 ViewState가 지원되는 속성이 있습니다.동적으로 생성 된 ASP.Net 컨트롤의 viewstate를 다시로드하는 중 문제가 발생했습니다.
ASPX 페이지의 단일 BindData 함수에서 탭에 대한 모든 데이터를 바인딩합니다. 이 함수 내에서 동적으로 생성 된 컨트롤의 ID를 설정하고 다른 속성을 설정하거나 이벤트를 연결하거나 데이터를 바인딩하기 전에 해당 컨트롤을 컨테이너 컨트롤에 추가합니다.
나는이 시나리오에서 내 페이징 사용자 컨트롤에서의 ViewState 변수의 값을 잃는 오전 :
주요 ASPX 페이지
Page_Init:
If IsPostBack Then
BindData ' Recreates the control tree on postback.
' ViewState is loaded successfully here.
End If
Page_Load:
If Not IsPostBack Then
BindData() ' Bind the initial data.
End If
[Some event that happens after Page_Load in response to clicking on my user control]:
...
BindData() ' Controls recreated with changed data but same IDs as in Page_Init.
' ViewState does not get loaded back into my control tree.
내가하지 viewstate가가의 두 번째 버전에 다시로드받을 것으로 예상해야 내 페이지 수명주기의 컨트롤 트리?
작성 코드를 제어 전 (pre-init)에 연결하려고 했습니까? JUst를 사용하여 viewstate의 값을 수동으로 재 할당하려는 노력을 줄일 수 있는지 확인하십시오. 비록 당신이 이미 그것을 만들었지 만 :) –
문제는 ASP.NET 내에서 한 번 바인드하자마자 뷰 상태를 잊었습니다. 이것은 init 후에로드가 발생하기 전에 발생합니다. 똑같은 컨트롤 트리를 다시 만들더라도 동일한 요청 중에 뷰 상태를 두 번 바인딩 할 수 없습니다. Annyoing, 네! –