2012-02-15 2 views
1

ASP.NET 4.0 사이트가 있습니다. 이 사이트에는 UpdatePanel 안에 트리 뷰 컨트롤이 있습니다.ASP.NET 4.0, ScriptManager 및 HistoryPoints

사용자가 처음 페이지를 방문 할 때 에 유의하십시오. 다시 게시하지 않았습니다. (자세한 내용은 1 분 후).

사용자가 트리의 노드를 클릭하면 다시 게시가 트리거됩니다. 사용자가 트리를 이동하면서 이력 포인트를 설정할 수 있습니다. 큰 문제는 아닙니다. 내역 지점은 선택된 노드의 ID입니다.

은 제가 보는 두 개의 행동이있다 (I 페이지에 다른 정보를 구동하기 위해이를 사용하려는)와 나는이 수습하는 방법으로 난처한 상황에 빠진 해요 :

  • 첫째, 역사의 포인트를 항상 현재 항목을 가리키는 것 같습니다. 아이템 A에서 시작하여 아이템 B를 클릭하면, 뒤로 버튼을 눌렀을 때 아이템 B에서 몇 번의 클릭으로 끝납니다 (이력 포인트가 모두 동일한 값으로 설정된 것처럼). 나는 역사가 사용자가 클릭 한 노드의 실행 목록이어야한다고 생각했지만,이 경우 목록은 항상 현재 ID가있는 기록 포인트의 모음입니다. (누군가가 scriptmanager에서 히스토리 포인트 콜렉션을 노출하는 방법을 알고 있다면, 어떻게하면 좋을지)
  • 둘째, 트리가 처음로드 될 때 포스트 백이 없다는 점입니다. Ajax 포스트 백없이 히스토리 포인트를 설정하는 방법이 있습니까? (나는 트리의 기본 상태를 보존하는 방법을 원하지만 루트에서 항목 A로 이동 한 다음 다시 클릭하면 사용자가 내 페이지에 도달하기 전에 어떤 페이지로든 이동합니다)

다른 누구도 ScriptManager의 기록 포인트에 이상한 동작을 발견 했습니까?

나는 viewstate, 숨겨진 필드, 쿠키, 세션 변수와 같은 대안에 대해서도 생각해 봤지만 시도한 솔루션 중 어떤 것도 가지고 있지 않다. 뒤로 버튼을 작동시킬 수있는 방법이 있습니까 기록이 없습니까? (나는 존재하지 않는다고 생각합니다)

답변

2

포스트 포인트없이 히스토리 포인트를 설정하려면 ScriptManager.AddHistoryPoint()으로 전화하십시오.

히스토리 포인트를 추가하는 것이 문제가 아니지만 ScriptManager.Navigate에서 상태를 올바르게로드하지 않았거나 이미 Item으로 업데이트 된 세션 정보에 의존하고 있다고 추측 할 것입니다. B.

기록 상태에있는 것을 확인하는 한 가지 방법은 각 기록 항목에 페이지 상태를 식별 할 수있는 이름/제목을 제공하는 것입니다. 테스트를 위해 단축 문자열 버전의 상태 문자열 해시를 사용하거나 문자열을 작성하여 페이지의 상태를 식별 한 다음 뒤로 버튼을 클릭하여 최근 브라우저 기록을 볼 때 설명적인 이름이있는 페이지를 볼 수 있습니다 그들을 확인하기 위해. BTW http://msdn.microsoft.com/en-us/library/cc472966.aspx

:

여기 그것에 대해 이야기 MSDN 페이지의 늦어서이 질문에 얻고있다. 문제가 계속되는 경우 일부 코드를 게시하면 현재 수행중인 작업을 볼 수 있습니다. 내 페이지의 여러 부분에있는 업데이트 패널에서 트리 컨트롤을 사용하여 페이지에 기록 포인트 기능을 구현했습니다.