2009-07-30 5 views
1

현재 동적으로 렌더링 된 여러 페이지가 포함 된 고급 웹 응용 프로그램을 작성 중입니다. 페이지는 Xml과 Xslt의 조합으로 주 콘텐츠가 렌더링되는 자리 표시자를 포함하는 표준 페이지입니다.ASP.Net Ajax Collapsible Extender ViewState 문제

최근에 동적으로 렌더링 된 패널 축소 및 확장을 허용하는 ASP.Net Ajax Toolkit 접을 수있는 엔도 너를 추가하려고 시도했습니다. 기본 xslt 템플릿에 익스텐더 마크 업을 추가했는데 모두 괜찮습니다. 포스트 백이 일어나고 패널이 초기 상태로 돌아갈 때까지는 모두 괜찮습니다. 예를 들어, 패널을 접은 상태에서 페이지를 접은 다음 다시 게시 한 후에 페이지가 열려있는 패널을 다시 설정하지 못하는 경우, 문제는 Viewstate 자체에 동적 컨텐트를 저장하고 페이지가로드 된 후에 만 ​​발생합니다 XML을 다시 렌더링하지 않고 viewstate에서 검색하십시오.

Phew .... 문제의 배경이 있습니다.

이제 주요 질문입니다. 어떻게 지구에서 Javascript로 Extender와 상호 작용할 수 있습니까? 나는 페이지 가변 클라이언트 측에서 상태를 캐시 할 수 있다고 확신하고 상태 포스트 포스트 백을 다시 적용하는 일을 보냈습니다. 그러나이를 수행하는 방법에 대한 문서 나 지식이없는 것처럼 보입니다. 내가 찾은 최고의 몇 가지 이벤트를 등록 할 수 있도록 몇 가지 매우 간단한 자바 스크립트 패널을 확장하거나 붕괴 때 잡을 수 있습니다.

내가 원하는 것은 각 패널 상태를 상호 작용하고 캐시하는 것입니다. 아무도 아무것도 제안 할 수 있습니까?

답변

0

좋아, 다른 사람이 비슷한 것을 성취해야 할 경우를 대비해서 지금은 제대로 작동하고 있습니다.

많은 연구 끝에 나는 here을 설명한 두 가지 방법 중 하나를 사용하여 클라이언트 측 이벤트에 연결할 수 있음을 발견했습니다.

그래서 가장 좋은 방법은 Page_Load() 이벤트의 페이지에 프로그래밍 방식으로 숨겨진 필드 (ASP.Net HiddenField)를 추가하고 한 필드에 구분 된 문자열로 각 문자를 추가 한 다음 extender 상태를 유지하는 extender 당 필드가 있어야합니다. 페이지가 일단 각 Extender 숨겨진 필드의 값을 게시하면 Request.Form 개체에서 검색되고 (ID는 숨겨진 필드 ID입니다) 그렇지 않으면 초기로드 인 경우 기본 값만 처리합니다.

그런 다음 onExpand 및 onCollapse 이벤트를 처리하고 특정 Extender 숨김 필드의 값을 업데이트하는 간단한 클라이언트 측 스크립트를 만들었습니다.

클라이언트 스크립트의 pageLoad 이벤트에서 숨겨진 필드 값을 기반으로 엔티 저 상태를 설정했습니다.

정말 간단합니다 .... 그걸로 시작하는 것이 좋겠다고 생각 했어야합니다!