2011-09-27 3 views
0

긴 목록을 보여주는 목록보기가 있습니다. 각 항목은 '숨길'수있는 기능이 있습니다. 확인란을 선택하여 모든 목록을 표시하거나 숨겨진 목록을 표시하지 않겠습니다. 사용자는 더 이상보고 싶지 않은 오래된 항목을 숨기고 어떤 시점에서는보고 싶을 수 있습니다. 이 결정의 값을 세션 변수에 저장하려면 사용자가 다른 페이지로 이동 한 다음 다시 돌아 오면 ShowAllCheckbox는 사용자가 이전에 결정한 내용으로 미리 채 웁니다. 모든 것이 유지되고 세션 변수를 얻을 수 없다는 점을 제외하고는 잘 작동합니다. 계속 False로 돌아갑니다.체크 박스로 설정된 세션 변수가 페이지간에 저장/공유되지 않음

aspx 페이지 :

Show Hidden: <asp:Checkbox ID="ShowHiddenCheckbox" runat="server" AutoPostBack="True" OnCheckedChanged="ShowHiddenCheckboxChange" /> 
... 
<asp:ListView ...> 
<!-- this list works fine, and pulls the correct records --> 

aspx.vb 페이지 : 내가 다른 페이지로 이동 한 다음에 다시 올 때

Protected Sub ShowHiddenCheckBoxChange(ByVal sender As Object, ByVal e As EventArgs) 
    ' toggle the values 
     Dim CheckBoxField As CheckBox = TryCast(sender, CheckBox) 
     If CheckBoxField.Checked Then 
      Session("ShowHiddenRotations") = False 
     Else 
      Session("ShowHiddenRotations") = True 
     End If 

End Sub 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    'if i navigate to another page, and come back to this one, this comes back as "False". I don't understand how it could be reset to False. 
    Response.Write("Session: " & Session("ShowHiddenRotations")) 

    'when page loads check if session variable has been set to show/hide the hidden rotations 
    If Session("ShowHiddenRotations") Then 

     If Session("ShowHiddenRotations") = True Then 
      'update sql query on select statement to show the hidden rotations 

      'update checkbox to show it as checked 
      ShowHiddenCheckBox.Checked = True 
     Else 
      ShowHiddenCheckBox.Checked = False 
     End If 
    Else 
     'not checked by default (ie don't show hidden) 
     ShowHiddenCheckBox.Checked = False 
    End If 

End Sub 

세션 변수가 항상 False로 다시 되돌아을이 내가 가진 무엇 이 하나. 세션 변수에 대한 나의 이해는 사용자가 브라우저를 닫을 때까지 한 페이지에서 다른 페이지로 값을 전달한다는 것이 었습니다. 어쩌면이 작업을 수행하는 또 다른 방법이있을 수 있습니다. 어떤 도움을 많이 주시면 감사하겠습니다! 감사!

답변

0

사이트에서 세션 상태를 사용할 수 있습니까? 페이지 수준 또는 web.config의 여러 가지 방법으로 비활성화 할 수 있습니다.

체크 박스 자동 포스트 백이 발생하기 전에 모든 요청에 ​​대해 Page_Load 이벤트 발생을 인식해야합니다. 나는 또한 당신이 저장하려고하는 것에 대해 약간 혼란 스럽다 : 나는 모든 행에 체크 박스가 있다고 가정한다. 그러나 그것은 set/not-set 값을 단일 세션 변수에 저장하려고 시도하는 것 같다. 어떤 것을 선택했는지, 어떤 것을 선택하지 않았습니까? :)

업데이트 : 좋아요, 코드를 조금만 청소 해 봅시다. 먼저 세션 값에 액세스 할 수있는 속성을 만듭니다.

Private Property ShowHiddenRotations As Boolean 
    Get 
    If Not Session("ShowHiddenRotations") Is Nothing Then 
     Return CType(Session("ShowHiddenRotations"), Boolean) 
    Else 
     Return False 
    End If 
    End Get 
    Set(value As Boolean) 
    Session("ShowHiddenRotations") = value 
    End Set 
End Property 

다른 페이지에서이 값을 사용하는 경우 별도의 클래스로 이동하는 것이 좋습니다. 나는 당신의 문제는 정말 일이 얼마나 단지 순서입니다 추측하고있어

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If not Page.IsPostBack 
     ' Load your data, better stick it in a seperate sub... 
     ShowHiddenCheckBox.Checked = ShowHiddenRotations 
    else 
     ' This section is executed BEFORE any control methods are run, i.e. ShowHiddenCheckBoxChange 
    end if 
End Sub 

...

Protected Sub ShowHiddenCheckBoxChange(ByVal sender As Object, ByVal e As EventArgs) 
    ShowHiddenRotations = ShowHiddenCheckbox.Checked 
End Sub 

과 :

그런 다음 우리는이에 가까운 뭔가 다른 코드를 줄일 수 있습니다 귀하의 페이지에서 호출되었습니다. 디버깅을하면 어떻게됩니까?

+0

감사합니다. Jakob. 세션 상태가 활성화되어 있음을 보여주는 테스트가 조금 더 많아서 문제가되지 않습니다. 각 행이 아니라 페이지에 하나의 확인란 만 있습니다. – russds

관련 문제