2010-03-02 8 views
1

여러 페이지에서 다시 사용하는 사용자 정의 컨트롤을 구현했습니다. 그러나 페이지를 넘나 드는 세션 유지 관리, 세션 이동 취소 - 기본적으로 상태 유지 관리 제어와 같은 여러 가지 문제에 직면 해 있습니다. 모든 것이 두통의 가치가 있다는 것이 궁금합니다.ASP.net 사용자 컨트롤 악몽

페이지가로드 될 때마다 컨트롤이 추가되고 세션을 사용하여 적용 가능한 경우 해당 상태를 다시 만듭니다. 페이지에서 벗어나면 웹 메서드로 자바 스크립트 window.onunload를 통해 세션을 지 웁니다. Window.onunload는 새로운 page_load 이벤트 이후에 문제가 발생하여 처리하기 어려운 상황을 만듭니다.

사용자 컨트롤을 포기하지 않고이 문제를 해결하는 방법에 대한 모든 팁은 무엇입니까? 코드를 사용하지 않고 코드를 재사용 할 수있는 다른 방법은 무엇입니까? 감사합니다.

+0

세션을 지우는 방법에 대한 코드를 게시 할 수 있습니까? – hunter

+0

웹 메서드를 사용하여 window.onunload 내에서 세션을 지 웁니다. – sarsnake

답변

1

사용자 정의 컨트롤을 호스팅하는 페이지에서 IsPostBack 사용 문제를 해결했습니다. 그런 식으로 페이지가 포스트 백 결과가 아닐 때마다 사용자 정의 컨트롤의 상태 변수가 초기화됩니다.

1

이것은 일반적인 두통입니다. 내가 본 모든 문헌과 내 개인적인 경험에 비추어 볼 때, 자바 스크립트 나 다른 방법을 통한 클리어링 세션에 의존하는 것은 실용적이지 않습니다. 세션 상태의 개념은 HTTP에 오버레이됩니다. 그것은 결코 세션을 인식하도록 의도되지 않았습니다.

세션 상태를 중단 점으로 강조하는 것처럼 들립니다. 상태 저장 데이터를 관리하기위한 ViewState 또는 데이터베이스를 고려해 보셨습니까? 사용자가 멀리 이동할 때마다 세션 데이터를 지우는 것이 중요한 이유는 무엇입니까?

+0

사용자가 최상위 메뉴를 클릭하면 이전에 기억 된 상태가 아닌 기본 제어 상태를 가져야합니다 .... 따라서 특정 장소에서는 세션을 정리하고 싶습니다. – sarsnake

+0

ViewState가 더 나은 솔루션입니다. –

+0

ViewState는 직렬화 가능 객체를 저장할 수있는 사전이며 숨겨진 양식 필드의 Base64로 인코딩 된 문자열로 여러 포스트 백에서 유지됩니다. 포스트 백을 통한 상태 관리에 유용 할 수 있지만 전선으로 전달되는 데이터의 양을 늘릴 수 있습니다. 사용법 : ViewState [ "MyData"] = myObj; –